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

4

2 回答 2

1

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

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

extern definition of points;

因此,例如,如果是int point[100]例如,您会说:

extern int point[100];

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

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

于 2011-12-08T12:00:50.197 回答
0

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

于 2011-12-09T17:49:02.833 回答