包含包含数组的文件时链接错误

时间:2011-12-08 11:48:14

标签: c++ qt opengl nurbs

我的类对象中有以下代码:

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 []。我不知道为什么会出现这个错误

2 个答案:

答案 0 :(得分:1)

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

您必须做的是,在您的标题文件中,只说:

extern definition of points;

例如,如果它是int point[100],你说:

extern int point[100];

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

注意:任何变量或函数都是如此。要对此进行测试,您可以尝试在其中一个标题中定义一个简单函数,并将其包含在两个位置。你也会得到相同的链接器错误。

答案 1 :(得分:0)

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