我正在創建一個openGL引擎(ES 1.1的一面和ES 2.0的一面)。這兩個引擎目前都有一些恆定的頂點(如下所示)。不幸的是,在編譯時我收到以下錯誤:const聲明導致Xcode中的鏈接器錯誤
ld: 1 duplicate symbol for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation) with the duplicate symbol being _Verticies.
爲什麼Xcode的抱怨在兩個單獨的文件複製恆定值?這些文件符合相同的協議......但大部分是他們的連接。在C++中,此方法正常工作,但在轉換爲Objective-C時會導致出現錯誤。
//Define the positions and colors of two triangles
const Vertex Verticies[] = { //per vertex data
{{-0.5f, -0.866f},{1.0f, 1.0f, 0.5f, 1.0f}},
{{0.5f, -0.866f},{1.0f, 1.0f, 0.5f, 1.0f}},
{{0.0f, 1.0f},{1.0f, 1.0f, 0.5f, 1.0f}},
{{-0.5f, -0.866f},{0.5f, 0.5f, 0.5f, 0.0f}},
{{0.5f, -0.866f},{0.5f, 0.5f, 0.5f}},
{{0.0f, -0.4f},{0.5f, 0.5f, 0.5f}},
};
解決方案:截至目前,默認情況下,Objective-C中的const值受制於項目的範圍,而不僅僅是文件的範圍。在C++中,當創建一個const值時,範圍會自動限制在它所在的文件中。要在Objective-C中解決此問題,必須使用靜態標記將範圍限制爲該特定文件。你也可以使用一個外部標籤(但是這將有點更多的工作)。
在你的問題中,你應該真的提到它在C++中工作並停止在Objective-C中工作。 – zneak 2013-03-06 20:12:59
我做過了,這是在我的聲明最後用C++表示這種方法工作正常。我會澄清一下,以防萬一出現混淆。 – TheCodingArt 2013-03-09 17:58:19