没有构造函数的类强制使用指针类型
class with no constructor forces the use of a pointer type?
我不想使用指针,当我不需要的时候,但这里有问题:在下面的代码中,如果我删除星号,使level
简单地成为object
,当然删除level = new Level;
行,我得到一个运行时错误,原因是level
然后在第一行初始化,在initD3D
和init_pipeline
之前-设置投影和视图的方法。你看到的问题是,level
使用这两件事,但当首先完成我得到一个null
指针异常。
这是一个简单的情况下,答案是使用指针?我以前遇到过这个问题,当一个类类型不接受参数时,你实际上是在声明它的地方初始化它....,这看起来非常令人烦恼还是我对最后一部分的理解错了?
Level* level;
D3DMATRIX* matProjection,* matView;
//called once
void Initialise(HWND hWnd)
{
initD3D(hWnd);
init_pipeline();
level = new Level;
}
我来自c#,在c#中,你只是用Level level
行声明一个名字;无论是否为参数,您仍然需要在某个时候初始化它
你是正确的,如果你这样做:
Level level;
则 如果因为 您已经尝试通过使 它的值是NULL而不是垃圾值,因为全局变量是静态初始化的,在这里,这意味着零初始化。 但是这些都有点偏离了真正的问题,即您首先使用的是全局变量。如果您需要按特定顺序实例化对象,那么就按该顺序实例化它们。不要使用全局变量,你可能会发现这样做,你也不需要使用指针。level
将在该点实例化。这是因为上面的表达式看起来是一个全局变量,它不仅是一个声明,而且还是一个定义。Level
在其他东西被实例化之前被实例化而导致您出现问题,那么您就遇到了全局变量糟糕的典型原因。level
成为指针然后稍后"初始化"它来解决这个问题。可能会让您感到惊讶的是,level
仍然在同一点被实例化。现在的区别是level
的类型。它不再是Level
了;现在它是一个指向level
的指针。如果您在代码输入Initialize
时检查level
的值,您将看到它的值为NULL。
在这种情况下,答案是使用指针
吗?
是的。
- C++中的双指针类型转换
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 将类指针类型转换为键时出错
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- C++在一个映射中存储不同的指针类型(并处理销毁)
- 指针类型类成员的动态强制转换的恒定性是什么?
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- STL 函数和函数类型与函数指针类型
- 如何调用指针类型的方法(禁用多态性)?
- 为什么新表达式可以正确生成指针类型,即使它应该返回 void*?
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 是否允许调用方对我的 Builder 类使用任何指针类型(包括智能指针)?
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 专门用于"direct"函数类型(与函数指针类型相对)
- 指向成员的指针类型和模板
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 在C++17中,为什么类模板和函数模板的指针类型推导明显不一致
- 为什么允许将整型、枚举和指向成员的指针类型reinterpret_cast到自身?