[英]Linking error when including file containing array
我的類對象中包含以下代碼:
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 []。 我不知道為什么會出現此錯誤
該.txt
文件直接或間接包含在您的至少兩個源文件中。 也就是說,從鏈接器的角度來看,它被定義了兩次。
您必須做的是在頭文件中僅說:
extern definition of points;
因此,例如,如果它是int point[100]
,則說:
extern int point[100];
然后,在一個且只有一個源文件中,包括.txt
文件。
注意:對於任何變量或函數,這同樣適用。 為了測試這一點,您可以嘗試在其中一個標頭中定義一個簡單函數,並將其包含在兩個位置。 您也將為此獲得相同的鏈接器錯誤。
您也可以考慮將文件命名為“ .h”而不是“ .txt”! (那不是解決方案,只是一個建議)-Shahbaz已經解釋了解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.