0

编译我的 C++ 程序时,我没有收到任何错误,但是在 unordered_map 中,哈希函数失败,尝试按 0 修改。(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();

我没有任何问题。

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

4

1 回答 1

7

当您将 Player 用作全局变量时,您不知道 entityManager(可能是另一个全局变量)是否已初始化 - 未定义全局变量的初始化顺序。

当您使用指针并使用new(我认为在 main() 中)对其进行初始化时,到那时所有全局变量都已创建,因此代码可以正常工作。

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

于 2013-07-17T13:56:27.047 回答