C++ 如何访问公共静态成员变量

C++ 如何访问公共静态成员变量,c++,static,singleton,C++,Static,Singleton,我有我的头文件,在其中我有选择,你可以看到它的公共静态成员 #ifndef SHAREDDATA_H_ #define SHAREDDATA_H_ #include "cocos2d.h" #include "GameTrinkets.h" using namespace std; class SharedData{ private: //... //Instance of the singleton static SharedData* m_mySinglet

我有我的头文件,在其中我有选择,你可以看到它的公共静态成员

#ifndef SHAREDDATA_H_
#define SHAREDDATA_H_
#include "cocos2d.h"
#include "GameTrinkets.h"
using namespace std;

class SharedData{
    private:
    //...
    //Instance of the singleton
    static SharedData* m_mySingleton;

public:
    //Get instance of singleton
    static SharedData* sharedGameManager();
    static int selection;
};
#endif /* SHAREDDATA_H_ */
我尝试访问的地方是:

我试图通过名称空间设置选择,因为这似乎是正确的方法 我试着通过单亲家庭的例子,但是运气不好 所以我尝试的代码

#include "GameScene.h"
#include "GameTrinkets.h"
#include "SharedData.h"
#include <time.h>

void GameScene::mainSpriteSelection(int selection){
    //1
    SharedData::selection=3;        
   //2 
   SharedData::sharedGameManager()->selection=selection;
}
我得到的错误是:

[armeabi]共享库:libcocos2dcpp.so
jni/./../Classes/GameScene.cpp:41:错误:未定义对“SharedData::selection”的引用。

错误消息告诉您需要定义静态变量选择

在GameScene.cpp文件中定义它

int GameScene::selection = 0;

必须在.cpp中将类外的静态变量定义为

最简单的例子:

#include <iostream>

using namespace std;

struct Foo
{
    static int member;
};

int Foo::member; // definition here



int main()
{
    cout << Foo::member << endl;
}

否则会出现链接器错误
//in the header file.    
class foo{  
  public:  
  static int bar;  
};

//in the implementation file  
int foo::bar // optional initialisation.  


 //in the main program 
 //header files  
 int main(){
 foo::bar = desired_initialisation_value; //no problem  
}  
可能重复的
//in the header file.    
class foo{  
  public:  
  static int bar;  
};

//in the implementation file  
int foo::bar // optional initialisation.  


 //in the main program 
 //header files  
 int main(){
 foo::bar = desired_initialisation_value; //no problem  
}