2011-12-08 94 views
1

我在我的类对象下面的代码文件时链接错误:包括含阵列

void Object::drawSurface() 
{ 
    GLUnurbsObj *nurbSurface; 

    nurbSurface = gluNewNurbsRenderer(); 
    gluNurbsProperty(nurbSurface, GLU_SAMPLING_TOLERANCE, 25.0); 
    gluNurbsProperty(nurbSurface, GLU_DISPLAY_MODE, GLU_FILL); 
    GLfloat knots[26] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; 

    gluBeginSurface(nurbSurface); 
    gluNurbsSurface(nurbSurface, 26, knots, 26, knots, 
     13*3, 3, &points[0][0][0], 13, 13, GL_MAP2_VERTEX_3); 
    gluEndSurface(nurbSurface); 
} 

另外还包括一个.txt文件,其中包含与所有的点的阵列。

一切正常,直到我包括我的类对象在任何其他类。然后我得到这个错误:

ld: duplicate symbol _points in openglscene.o and main.o 
collect2: ld returned 1 exit status 

编译器意味着在txt中声明的符号points []。我没有线索为什么会出现这个错误

回答

1

.txt文件是直接或间接包含在至少两个源文件中。也就是说,从链接器的角度来看,它被定义了两次。

你必须做什么,在你的头文件,只是说:

extern definition of points; 

因此,举例来说,如果是int point[100]例如,你说:

extern int point[100]; 

然后,在一个并且只有一个源文件,则包含.txt文件。

注意:对于任何变量或函数也是如此。为了测试这个,你可以尝试在其中一个头文件中定义一个简单的函数,并将它包含在两个位置。你也会得到相同的链接器错误。

+0

是的,就是这样....谢谢 – buddy

0

您也可以考虑将文件命名为“.h”而不是“.txt”! (这不是解决方案 - 只是一个建议) - Shahbaz已经解释了解决方案。

+0

谢谢你的提示。你能解释为什么它可能很重要吗?有特别的原因吗? – buddy