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

Ken*_* Li 4 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);
};
Run Code Online (Sandbox Code Playgroud)

这是客户端代码:

CommandManager::started = true;
Run Code Online (Sandbox Code Playgroud)

将这两个文件链接在一起我得到:

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个未解析的外部

我在哪里错了?

Naw*_*waz 21

你做错了.

class CommandManager {

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

然后将静态成员的定义放在.cpp文件中:

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

bool CommandManager::started = true; //you must do this in .cpp file
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用 CommandManager::started在客户端的代码.