Ошибка при объявлении глобальной переменной в цели c ++? - PullRequest
1 голос
/ 14 июня 2011

Я получаю сообщение об ошибке Command/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1 всякий раз, когда я помещаю глобальную переменную id theScene в файл .mm.Он работает с файлом .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 голосов
/ 17 июня 2011

Эта переменная объявлена ​​где-то в заголовке? Если да, используется ли в объявлении ключевое слово extern? Если этого не произойдет, компилятор выдаст символ для каждого модуля компиляции (.m, .mm, .c, .cpp и т. Д.), Который #include s заголовок.

Если заголовок не является проблемой, то что-то в вашем модуле компиляции "HelloWorldScene" и "TheifGameAppDelegate" создает символ theScene. Либо переменная определена в обоих, либо что-то еще, например, функция, имеет одно и то же имя.

Без публикации вашего кода или других подробностей я больше не могу рассказать вам об этой проблеме.

Обновление : правильный способ использования глобальных переменных в нескольких файлах - объявить переменную как extern в заголовке (условно используйте extern "C" при компиляции с (Objective-) C ++ и переменной также должен быть доступен из (Objective-) C. Затем определите его ровно один раз в файле .m, .mm, .c или .cpp без * extern и, возможно, с инициализатором. Заголовок конечно, должны быть включены во все файлы, которым требуется доступ к переменной.

...