每当我在.mm文件中放入一个全局变量id为Scene时,我都会得到错误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
我不知道这到底意味着什么,所以有人能解释一下吗?
这个变量是在某个头中声明的吗?如果是,声明是否使用了extern
关键字?如果没有,编译器将为#include
作为标头的每个编译单元(.m、.mm、.c、.cpp等)发出一个符号。
如果标题不是问题,那么您的"HelloWorldScene"one_answers"TheifGameAppDelegate"编译单元中都会产生一个场景符号。要么在两者中都定义了变量,要么其他东西(如函数)恰好具有相同的名称。
如果不公布你的代码或其他详细信息,我就无法再告诉你这个问题。
更新:在多个文件中使用全局变量的正确方法是在标头中将变量声明为extern
(在使用(Objective-)C++编译时有条件地使用extern "C"
,并且该变量还需要从(Objective-)C访问。然后在.m、.mm、.c或.cpp文件中定义一次,不使用extern
,也可能使用初始化程序。当然,所有需要访问变量的文件都必须包含标头。