2011-12-05 53 views
4
class CommandManager { 

public: 
    void sendText(std::string command); 
    static bool CommandManager::started; 

private: 


    bool parseCommand(std::string commands); 

    void changeSpeed(std::vector<std::string> vec); 
    void help(std::vector<std::string> vec); 
}; 

而這裏的客戶端代碼:解析的外部符號訪問時,靜態變量

CommandManager::started = true; 

連接這兩個文件一起,我得到:

1> UAlbertaBotModule.obj:錯誤LNK2001:無法解析的外部符號「public:static bool CommandManager :: started」(?Started @ CommandManager @@ 2_NA)

1> C:\ Development \ School \ cmput350-uofabot \ UAlbertaBot \ vs2008 \ Release \ UAlbertaBot.dll:致命錯誤LNK1120:1無法解析的外部設備

我在哪裏出錯了?

+3

可能重複的[靜態類成員上未解析的外部符號](http://stackoverflow.com/questions/195207/unresolved-external-symbol-on-static-class-members) –

+0

我看着這個問題和解決方案沒有幫助我 –

+0

@KenLi:嘗試我在我的答案中說。讓我知道你是否仍然面臨問題。 – Nawaz

回答

21

你這樣做不正確。

class CommandManager { 

public: 
    void sendText(std::string command); 
    static bool started; //NOT this -> bool CommandManager::started 
    //... 
}; 

然後把靜態成員的定義.cpp文件:

#include "CommandManager.h" //or whatever it is 

bool CommandManager::started = true; //you must do this in .cpp file 

現在你可以使用CommandManager::started在您的客戶端代碼。

2

考慮將

bool CommandManager::started; 

,你定義其他成員。

4

你應該有你的類中:

class CommandManager { 
public: 
    void sendText(std::string command); 
    static bool started; 
    //// etc 
}; 

,並在類的外部,在*.cc文件(不是在*.hh頭文件),像

bool CommandManager::started; 

的定義順便說一句,我相信你最好做到這一點private