访问静态变量时未解析的外部符号

时间:2011-12-05 09:38:17

标签: c++ linker-errors

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&gt; UAlbertaBotModule.obj:错误LNK2001:未解析的外部符号“public:static bool CommandManager :: started”(?started @ CommandManager @@ 2_NA)

     

1&gt; C:\ Development \ School \ cmput350-uofabot \ UAlbertaBot \ vs2008 \ Release \ UAlbertaBot.dll:致命错误LNK1120:1个未解析的外部

我在哪里出错?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

你应该在课堂上:

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

在课外,在*.cc文件中(不在*.hh头文件中),像

这样的定义
bool CommandManager::started;
顺便说一句,我相信你最好能做出private

答案 2 :(得分:2)

考虑加入

bool CommandManager::started;

定义其他成员。