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

发布于 2024-12-19 13:35:08 字数 705 浏览 1 评论 0原文

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

我哪里出错了?

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);
};

And here's the client code:

CommandManager::started = true;

Linking these two files together I get:

1>UAlbertaBotModule.obj : error LNK2001: unresolved external symbol "public: static bool CommandManager::started" (?started@CommandManager@@2_NA)

1>C:\Development\School\cmput350-uofabot\UAlbertaBot\vs2008\Release\UAlbertaBot.dll : fatal error LNK1120: 1 unresolved externals

Where did I go wrong here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

め七分饶幸 2024-12-26 13:35:08

你这样做是错误的。

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

You're doing that incorrectly.

class CommandManager {

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

then put the definition of static member in .cpp file as:

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

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

Now you can use CommandManager::started in your client code.

甜点 2024-12-26 13:35:08

您应该在类内部:

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

和类外部,在 *.cc 文件中(而不是在 *.hh 头文件中),像 BTW 这样的定义

bool CommandManager::started;

我相信, 您最好将其设为私有

You should have inside your class:

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

and outside your class, in a *.cc file (not in a *.hh header file), a definition like

bool CommandManager::started;

BTW, I believe you'll better make that private.

━╋う一瞬間旳綻放 2024-12-26 13:35:08

考虑将

bool CommandManager::started;

其放在定义其他成员的位置。

Consider putting

bool CommandManager::started;

where you define other members.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文