2012-08-07 76 views
0

我有两个类,它的实现包含一个名为“geometryCoords”的数组,在“Corridor”类中它在声明中初始化,在“RhombusArray”中它在“init”方法中完成:Objective-C @implementation变量的可见性

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

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

在调试该方法我注意到,“geometryCoords”传递初始化代码之前具有第一类的数组的值。更改阵列的宣言 “RhombusArray” 之后:

GLfloat _geometryCoords[]; 

GLfloat* _geometryCoords; 

我得到了一个“苹果的Mach-O链接错误:重复的符号_geometryCoords在/BlaBla/Corridor.o和/ BLABLA/RhombusArray.o”。 这两个类的头文件都被导入到.mm文件中,并删除其中的一个可以解决冲突。 我该如何处理这个问题?

回答

0

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

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

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

+0

Thad做的工作,谢谢。 – user1570730 2012-08-07 10:45:20