编译我的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();
我没有任何问题。
我一直在寻找 - 没有成功。我能做错什么?
答案 0 :(得分:7)
当你使用Player作为全局时,你不知道entityManager(可能是另一个全局)是否已经初始化 - 没有定义全局变量的初始化顺序。
当你使用指针并用new
初始化它时(在main(中,我推测)),所有全局变量都是在那时创建的,所以代码可以工作。
这突出了全局变量不好主意的原因之一。