Я пытаюсь написать одноэлементный класс для обслуживания игровых данных. Он называется GameManager, как и книга "Learning cocos2d".
Вот мой файл .h:
#ifndef GameManager_h
#define GameManager_h
#include "cocos2d.h"
class GameManager
{
private:
//Constructor
GameManager();
//Instance of the singleton
static GameManager* m_mySingleton;
public:
//Get instance of singleton
static GameManager* sharedGameManager();
//A function that returns zero "0"
int ReturnZero(){return 0;}
// another test function
void runScene() { CCLOG("test");};
};
и вот мой файл .cpp:
#include "SimpleAudioEngine.h"
#include "GameManager.h"
using namespace cocos2d;
using namespace CocosDenshion;
//All static variables need to be defined in the .cpp file
//I've added this following line to fix the problem
GameManager* GameManager::m_mySingleton = NULL;
GameManager::GameManager()
{
}
GameManager* GameManager::sharedGameManager()
{
//If the singleton has no instance yet, create one
if(NULL == m_mySingleton)
{
//Create an instance to the singleton
m_mySingleton = new GameManager();
}
//Return the singleton object
return m_mySingleton;
}
Вот вызов в HelloWorld.cpp:
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event) {
CCLOG("return zero:%d",GameManager::sharedGameManager()->ReturnZero()); // Line 231
GameManager::sharedGameManager()->runScene(); // Line 232
}
Вот странная проблема, она отлично работает с xcode,можно построить на iPhone.но когда я пытаюсь собрать с помощью ndk:
./obj/local/armeabi/objs-debug/game_logic/HelloWorldScene.o: In function `HelloWorld::ccTouchesEnded(cocos2d::CCSet*, cocos2d::CCEvent*)':
/Users/abc/Documents/def/def/android/jni/../../Classes/HelloWorldScene.cpp:232: undefined reference to `GameManager::sharedGameManager()'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libgame_logic.so] Error 1
Если неопределенная ссылка на GameManager :: sharedGameManager (), почему, черт возьми, работает первый вызов?
Любая помощь будет делать, спасибо!