为什么我的全局变量必须声明为指针
Why must my global variable be declared as a pointer?
编译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()中),所有的全局变量都已经创建好了,所以代码就可以工作了。
这突出了为什么全局变量是个坏主意的原因之一。
相关文章:
- 为什么我必须以这种方式声明指针?
- 声明指针时更改星号的位置
- 为什么要在初始化SDL之前在SDL中声明指针
- 在C++中声明指针的 2D 数组的方法
- 如何在C 中使用不同数据类型的类模板指针声明指针
- 如何声明指针/引用对模板类成员类型
- C :如何使用thread_local声明指针变量
- 声明指针时的隐式内存分配和初始化
- 了解初始化和声明指针变量时的警告和编译错误
- 在标头中声明指针会导致访问冲突
- 为什么我不能转发声明指针结构?
- 声明指针的动态数组
- 正在声明指针的类型
- C++11 decltype:如何声明指针指向的类型
- C++ 转发声明(指针) - 访问成员
- 为什么我可以在头文件中声明数组,但不能声明指针
- 为什么我需要声明指针而不是对象
- 我们可以声明指针的大小吗?
- 错误 C2143:语法错误:声明指针时'*'之前缺少';'
- 在实现类之前声明指针时出现问题