为什么我的全局变量必须声明为指针

Why must my global variable be declared as a pointer?

本文关键字:声明 指针 我的 全局变量 为什么      更新时间:2023-10-16

编译C++程序时,我没有收到任何错误,但在unordered_map中,哈希函数失败,试图通过0进行mod。(stl的hashtable_policy.h的345行)

我已经找到了解决办法,但不知道为什么我一开始就有这个问题。我的结构看起来像这样,(很抱歉有特定的代码。)

struct Player {
private:
    Entity& entity = entityManager->create();
public:
    Player() {
        entity.addComponent(new PositionComponent(0, 0)); // Add component uses the unordered map.
    }
};
Player playerOne; // Error perpetuates through constructor.

然而,如果我将playerOne声明为指针,就像这样:

Player* playerOne;

然后呼叫:

playerOne = new Player();

我没有任何问题。

我一直在寻找,但没有成功。我可能做错了什么?

当您使用Player作为全局时,您不知道entityManager(可能是另一个全局)是否已经初始化-全局初始化的顺序没有定义。

当你使用指针并用new初始化它时(我想是在main()中),所有的全局变量都已经创建好了,所以代码就可以工作了。

这突出了为什么全局变量是个坏主意的原因之一。