簡體   English   中英

包含文件包含數組時的鏈接錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM