전역 변수 id theScene을 .mm 파일에 넣을 때마다 오류 Command/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1
가 표시됩니다. .m 파일과 함께 작동하지만 나중에 box2d 구현을 위해 .mm이 필요합니다. 또한, 나는 실제 오류가 여기있는 생각 :객관적인 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
올바른 방법은 변수를 'extern'으로 선언하는 것입니다. (Objective-) C++로 컴파일 할 때 조건 적으로'extern "C"'를 사용하고 (Objective-) C에서 변수에 액세스 할 수 있어야합니다. 그런 다음 .m, .mm, .c 또는 .cpp 파일에 정확히 한 번만 정의하십시오. *는 'extern'없이 * 가능하면 초기화 프로그램과 함께 * 지정할 수 있습니다. 나는 그것이 ".mm"파일에서 선언 할 때 "작동"하는 이유를 의심합니다. 실제로 동일한 변수가 아닙니다. 즉, 한 파일에서 변경하면 다른 파일은 변경 사항을 볼 수 없습니다. C 대 C++ 링크를 찾습니다. – pmdj
유형, 메소드 및 함수 이름만을 기반으로 전역 변수를 재정의 할 수 없습니다. 이와 같이, 'extern "C"'는이 경우에는 필요하지 않습니다. 이는 컴파일러에게 재정의 (override)에 필요한 이름 변환을 적용하지 말 것을 명령하기 때문입니다. 전역을 선언 할 때 일반 'extern'키워드를 사용하고 실제로 전역을 정의하는 곳에 두십시오. – uliwitness