Question

J'essaie d'écrire une classe Singleton pour maintenir les données de jeu, elle s'appelle Gamemanager, tout comme le livre "Apprendre Cocos2D" produit.

Voici mon fichier .h fichier:
#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");};

};

et voici mon fichier .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;
}

Voici l'appel à helloworld.cpp:
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event) {
    CCLOG("return zero:%d",GameManager::sharedGameManager()->ReturnZero());  // Line 231
    GameManager::sharedGameManager()->runScene();  // Line 232
}

Voici le problème étrange, ça a fonctionné bien avec Xcode, peut construire sur iPhone.Mais quand j'essaie de construire avec 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

Si une référence non définie à `Gamemanager :: SharedGamemanager () ', pourquoi diable Le premier appel fonctionne?

Toute aide fera, merci!

Était-ce utile?

La solution

Êtes-vous sûr d'avoir inclus votre fichier CPP avec la mise en œuvre de Gamemanager (à laquelle vous vous référez comme «Voici mon fichier .CPP») dans votre fichier Android.mk?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top