objective-c - 在 Xcode 中导致链接器错误的 Const 声明

标签 objective-c xcode header constants linker-errors

我正在创建一个 openGL 引擎(一侧用于 ES 1.1,另一侧用于 ES 2.0)。这两个引擎目前都有一些常量顶点(如下所示)。不幸的是,在编译时我收到以下错误:

 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 提示两个单独的文件中存在重复的常量值?文件符合相同的协议(protocol)……但在大多数情况下,这是它们的连接。在 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 中的常量值似乎默认受项目范围的影响,而不仅仅是文件的范围。在 C++ 中,当创建一个 const 值时,范围会自动限制在它所在的文件中。要在 Objective-C 中解决这个问题,必须使用 static 标记将范围限制在该特定文件中。您也可以使用 extern 标签(但这会多一些工作)。

最佳答案

它适用于 C++,因为在 C++ 中,具有 const 的全局变量也隐含为 static。在 C 中不是这种情况。当您更改为“继承”自 C 的 Objective-C 时,此行为将丢失并且 const 符号突然变为 extern

const 变量前加上 static 以获得与 C++ 中相同的行为。

关于objective-c - 在 Xcode 中导致链接器错误的 Const 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15256777/

相关文章:

iphone - 如何将文本字段中的文本插入到警报 View 中

ios - 如何调试“响应于背板的终止而终止”

ios - 设置 JTCalendar 单元格的大小

php - 为什么我的 301 重定向需要这么长时间?

c - C 中的模块化编程(嵌套 header )

javascript - 从 PHP 脚本获取音频文件时更改 JavaScript 音频对象的当前时间

ios - iOS 中水印图像大小根据视频大小而变化

objective-c - NSImage 前向声明错误

objective-c - XCTAssertEquals 在 Swift 中有两个字典

ios - 在 Xcode 6 机器人上选择分支