无论何时我将全局变量id theScene放在.mm文件中,我都会收到错误Command/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1
。它适用于.m文件,但是稍后我需要.mm来执行box2d。另外,我觉得在这里真正的错误所在:在目标C++中声明全局变量时出错?
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
我不知道这到底是什么意思所以有人解释一下吗?
是的,我不得不在.mm文件中声明变量 – dgTheUser 2011-06-20 02:31:47
正确的方法是声明变量为'extern'在头文件中(有条件地使用'extern“C”'编译时使用(Objective-)C++并且该变量也需要可以从(Objective-)C访问。然后在.m,.mm,.c或.cpp文件中只准确定义一次*不带'extern'并可能带有一个初始化程序。我怀疑它在.mm文件中声明它时“起作用”的原因是它实际上不再是同一个变量,即如果你在一个文件中改变它,另一个文件将不会看到改变。查看C和C++的链接。 – pmdj 2011-06-20 12:46:16
您不能基于类型覆盖全局变量,只能使用方法和函数名称。因此,在这种情况下不需要'extern'C“',因为它仅告诉编译器不应用覆盖所需的名称修改。在声明全局变量时使用简单的'extern'关键字,并将其保留在实际定义全局的位置。 – uliwitness 2013-01-23 09:24:19