访问静态变量时出现未解决的外部符号错误

5
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 : error LNK2001: 无法解析的外部符号 "public: static bool CommandManager::started" (?started@CommandManager@@2_NA)

1>C:\Development\School\cmput350-uofabot\UAlbertaBot\vs2008\Release\UAlbertaBot.dll : 致命错误 LNK1120: 1 个无法解析的外部

请问我做错了什么?

3
可能是静态类成员上的未解决外部符号重复问题的重复问题。 - Joris Timmermans
我看了那个问题,但解决方案并没有对我有帮助。 - Ken Li
@KenLi:按照我在答案中所说的尝试一下。如果你仍然遇到问题,请告诉我。 - Nawaz
@KenLi - 另一个问题与您的问题完全相同 - 您在类中声明了静态变量,但没有定义它。 - Joris Timmermans
3个回答

24

你做得不正确。

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


4

你的类中应该包含以下内容:

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

在你的类外部,在一个 *.cc 文件中(而不是 *.hh 头文件中),定义如下:

bool CommandManager::started;

顺便提一下,我认为你最好把它改成private


2

考虑将

bool CommandManager::started;

这里是你定义其他成员的地方


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接