我如何声明一个对象而不初始化它?
这是我的头文件
#include "shader.h"
Class Renderer {
private:
kaarez::graphics::Shader m_terrainShader;
};
我的源文件
#include "Renderer.h"
#include "Shader.h"
Renderer::Renderer() {
//Load terrain shader
m_terrainShader = kaarez::graphics::Shader("vertex.txt", "fragment.txt");
}
我得到的错误是没有适当的默认构造函数可用于着色器。
Shader是只包含头文件的,当我在main方法中通过kaarez::graphics::Shader terrainShader("vertex.txt", "fragment.txt");
声明它时,它可以工作
怎么了?
3条答案
按热度按时间2fjabf4q1#
初始化构造函数成员初始化器列表中的成员变量,如下所示:
yc0p9oo02#
您需要在类initializer list中初始化
m_terrainShader
,因为它不是默认可构造的。你必须这样做的原因是当你进入构造函数的主体时,所有的类成员都已经初始化了,因为
m_terrainShader
不能被默认初始化,你必须显式地初始化它。r6vfmomb3#
这可能不是一个精确的答案(而且已经晚了很多年),但是在C++11或更高版本中,您可以使用唯一指针(或共享指针)。
在标题中do:
在代码中
它比指针更安全,因为您不必担心删除它失败或删除它而不对其赋值。