0

2つのクラスがあり、その実装には「geometryCoords」という名前の配列が含まれています。「Corridor」クラスでは宣言で初期化され、「RhombusArray」では「init」メソッドで実行されます。

GLfloat _geometryCoords[]={/*Values here*/};

GLfloat _geometryCoords[];
...//In the init method
_geometryCoords = (GLfloat*)malloc(somevalue);
for(...){/*Assignment*/}

このメソッドをデバッグしているときに、初期化コードが渡される前に、「geometryCoords」にファーストクラスの配列の値があることに気付きました。「RhombusArray」の配列の宣言を次のように変更した後:

GLfloat _geometryCoords[];

GLfloat* _geometryCoords;

「AppleMach-oリンカーエラー:/BlaBla/Corridor.oと/BlaBla/RhombusArray.oのシンボル_geometryCoordsが重複しています」というメッセージが表示されました。これらのクラスのヘッダーは両方とも.mmファイルにインポートされ、そのうちの1つを削除すると競合が解決されます。この問題をどのように処理する必要がありますか?

4

1 に答える 1

0

リンカエラーやその他の問題を発生させるには、これらの配列の両方にグローバルスコープが必要です(つまり、関数の外部およびクラスインターフェイスの外部で宣言されている)。次のように宣言します。

static GLfloat _geometryCoords[]={/*Values here*/};
//^^^^ this is the new bit

staticキーワードは、シンボルが宣言されているコンパイル単位(ファイル)内でのみシンボルを表示し.mます。

于 2012-08-07T10:37:10.630 に答える