我的类对象中有以下代码:
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 []。我不知道为什么会出现这个错误
答案 0 :(得分:1)
该.txt
文件直接或间接包含在至少两个源文件中。也就是说,从链接器的角度来看,它定义了两次。
您必须做的是,在您的标题文件中,只说:
extern definition of points;
例如,如果它是int point[100]
,你说:
extern int point[100];
然后,在一个且只有一个源文件中,包含.txt
文件。
注意:任何变量或函数都是如此。要对此进行测试,您可以尝试在其中一个标题中定义一个简单函数,并将其包含在两个位置。你也会得到相同的链接器错误。
答案 1 :(得分:0)
您也可以考虑将文件命名为“.h”而不是“.txt”! (这不是解决方案 - 只是一个建议) - Shahbaz已经解释了解决方案。