Cha*_*s W 0 c++ pointers global-variables new-operator
在编译我的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.
Run Code Online (Sandbox Code Playgroud)
但是,如果我将playerOne声明为指针,就像这样:
Player* playerOne;
Run Code Online (Sandbox Code Playgroud)
然后打电话:
playerOne = new Player();
Run Code Online (Sandbox Code Playgroud)
我没有任何问题.
我一直在寻找 - 没有成功.我能做错什么?
当您使用Player作为全局时,您不知道entityManager(可能是另一个全局)是否已经初始化 - 未定义全局变量的初始化顺序.
当你使用指针并用它new
(在main(中,我推测)初始化它时,所有的全局变量都是在那时创建的,所以代码可以工作.
这突出了全局变量不好主意的原因之一.