在目标c ++中声明全局变量时出错?

时间:2011-06-14 19:09:33

标签: static global-variables global objective-c++

每当我在.mm文件中放入一个全局变量id theScene时,我都会收到错误Command/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1。它适用于.m文件,但稍后我需要.mm用于box2d实现。另外,我认为真正的错误存在于此:

ld: duplicate symbol _theScene in /Users/sgupta100/Documents/TheifGame/build/TheifGame.build/Release-iphonesimulator/TheifGame.build/Objects-normal/i386/HelloWorldScene.o and /Users/sgupta100/Documents/TheifGame/build/TheifGame.build/Release-iphonesimulator/TheifGame.build/Objects-normal/i386/TheifGameAppDelegate.o

我不知道这究竟意味着什么,有人可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

这个变量是在某个标题中声明的吗?如果是,声明是否使用extern关键字?如果没有,编译器将为#include标题的每个编译单元(.m,.mm,.c,.cpp等)发出符号。

如果标题不是问题,那么“HelloWorldScene”和“TheifGameAppDelegate”编辑单元中的某个内容正在生成一个theScene符号。变量是在两者中定义的,或者其他东西,例如函数,恰好具有相同的名称。

如果不发布您的代码或其他详细信息,我就无法告诉您有关此问题的信息。

更新:在多个文件中使用全局变量的正确方法是在标头中将变量声明为extern(在编译时有条件地使用extern "C"(目标 - )C ++和变量也需要可以从(Objective-)C访问。然后在.m,.mm,.c或.cpp文件中完全定义它一次 extern当然,所有需要访问变量的文件都必须包含标题。