Objective-C@实现变量可见性



我得到了两个类,它们的实现包含一个名为"geometryCoords"的数组,在"Corridor"类中,它在声明中初始化,在"RhombusArray"中,它是在"init"方法中完成的:

GLfloat _geometryCoords[]={/*Values here*/};

GLfloat _geometryCoords[];
...//In the init method
_geometryCoords = (GLfloat*)malloc(somevalue);
for(...){/*Assignment*/}

在调试此方法时,我注意到"geometryCoords"在传递初始化代码之前具有第一个类的数组的值。将"RhombusArray"中数组的声明从更改后

GLfloat _geometryCoords[];

GLfloat* _geometryCoords;

我得到了一个"Apple Mach-o链接器错误:/BraBla/Corridor.o和/BraBla/RombusArray.o中的符号_geometryCoords重复"。这两个类的头都导入到.mm文件中,删除其中一个可以解决冲突。我应该如何处理这个问题?

这两个数组都必须具有全局作用域(即,它们在函数和类接口之外声明),才能获得链接器错误和其他问题。这样声明它们:

static GLfloat _geometryCoords[]={/*Values here*/};
//^^^^ this is the new bit

static关键字使符号仅在声明它们的编译单元(.m文件)中可见。

最新更新