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

时间:2013-07-17 13:53:14

标签: 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.

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

Player* playerOne;

然后致电:

playerOne = new Player();

我没有任何问题。

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

1 个答案:

答案 0 :(得分:7)

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

当你使用指针并用new初始化它时(在main(中​​,我推测)),所有全局变量都是在那时创建的,所以代码可以工作。

这突出了全局变量不好主意的原因之一。

相关问题