Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有构造函数的类强制使用指针类型?_C++ - Fatal编程技术网

C++ 没有构造函数的类强制使用指针类型?

C++ 没有构造函数的类强制使用指针类型?,c++,C++,我不想在不需要的时候使用指针,但问题是:在下面的代码中,如果我删除星号并使level成为一个简单的对象,当然删除line-level=new-level;我得到一个运行时错误,原因是在initD3D和init_管道之前,在第一行初始化该级别,这些方法设置了投影和视图以供使用。您可以看到,问题是该级别使用这两种方法,但当首先完成时,我会得到一个空指针异常 这仅仅是一种答案是使用指针的情况吗?我以前遇到过这个问题,基本上,当一个类类型不接受任何参数时,您实际上是在声明它的地方初始化它,这看起来非常令

我不想在不需要的时候使用指针,但问题是:在下面的代码中,如果我删除星号并使level成为一个简单的对象,当然删除line-level=new-level;我得到一个运行时错误,原因是在initD3D和init_管道之前,在第一行初始化该级别,这些方法设置了投影和视图以供使用。您可以看到,问题是该级别使用这两种方法,但当首先完成时,我会得到一个空指针异常

这仅仅是一种答案是使用指针的情况吗?我以前遇到过这个问题,基本上,当一个类类型不接受任何参数时,您实际上是在声明它的地方初始化它,这看起来非常令人烦恼。。。。还是我错了最后一部分

Level* level;

D3DMATRIX* matProjection,* matView;

//called once
void Initialise(HWND hWnd)
{
initD3D(hWnd);
    init_pipeline();

level = new Level;
}

我来自c语言,在c语言中,您只需声明一个具有行级别的名称;无论是否有参数,您仍必须在某个点对其进行初始化。

如果您这样做,则正确:

Level level;
然后,级别将在该点实例化。这是因为上面的表达式看起来是一个全局表达式,它不仅是一个声明,也是一个定义

若这是因为在实例化其他东西之前实例化了Level而导致的问题,那个么您已经遇到了globals糟糕的典型原因

您试图通过将级别设置为指针,然后稍后对其进行初始化来解决此问题。Wjhat可能会让您感到惊讶的是,该级别仍然在同一点上被实例化。现在的区别是级别的类型。它不再是一个关卡;现在它是一个指向级别的指针。如果在代码进入Initialize时检查level的值,您将看到它的值为NULL

它的值是NULL而不是垃圾值,因为全局变量是静态初始化的,在这里的例子中,这意味着零初始化

但这与真正的问题有些相切,即首先要使用globals。如果需要按特定顺序实例化对象,则按该顺序实例化它们。不要使用全局变量,您可能会发现这样做也不需要使用指针

这仅仅是一种答案是使用指针的情况吗


是的,基本上是这样。

它有一个值——但这个值是垃圾——它不是垃圾,因为全局变量是零初始化的。这与级别是否有用户定义的构造函数或其构造函数是否接受参数无关。问题是全局变量在输入main之前被初始化。如果你写level1,2,3;,你会看到完全相同的东西;,相应的构造函数将在initD3D和init_管道之前调用。