私はopenGLエンジンを作成しています(一方はES 1.1用、もう一方はES 2.0用)。両方のエンジンには現在、いくつかの一定の Vertex があります (以下に示すように)。残念ながら、コンパイル時に次のエラーが表示されます。
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 が 2 つの別々のファイルで定数値が重複していると文句を言うのはなぜですか? 同じプロトコルに準拠するファイル...しかし、ほとんどの場合、それはそれらの接続です。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 でこの問題を修正するには、静的タグを使用してスコープを特定のファイルに制限する必要があります。extern タグを使用することもできます (ただし、少し手間がかかります)。