每当我在.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
我不知道这究竟意味着什么,有人可以解释一下吗?
答案 0 :(得分:0)
这个变量是在某个标题中声明的吗?如果是,声明是否使用extern
关键字?如果没有,编译器将为#include
标题的每个编译单元(.m,.mm,.c,.cpp等)发出符号。
如果标题不是问题,那么“HelloWorldScene”和“TheifGameAppDelegate”编辑单元中的某个内容正在生成一个theScene符号。变量是在两者中定义的,或者其他东西,例如函数,恰好具有相同的名称。
如果不发布您的代码或其他详细信息,我就无法告诉您有关此问题的信息。
更新:在多个文件中使用全局变量的正确方法是在标头中将变量声明为extern
(在编译时有条件地使用extern "C"
(目标 - )C ++和变量也需要可以从(Objective-)C访问。然后在.m,.mm,.c或.cpp文件中完全定义它一次 extern
当然,所有需要访问变量的文件都必须包含标题。