如何在不初始化的情况下声明对象?
这是我的头文件
#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没有合适的默认构造函数。
Shader只是标题,当我在主方法中通过kaarez::graphics::Shader terrainShader("vertex.txt", "fragment.txt");
有什么问题?
答案 0 :(得分:1)
在构造函数成员初始值设定项列表中初始化成员变量,如下所示:
Renderer::Renderer() : m_terrainShader("vertex.txt", "fragment.txt") {
}
答案 1 :(得分:1)
您需要在类initializer list中初始化m_terrainShader
,因为它不是默认构造的。
Renderer::Renderer() : m_terrainShader("vertex.txt", "fragment.txt"){}
您必须这样做的原因是,当您输入构造函数的主体时,所有类成员都已初始化。由于m_terrainShader
无法默认初始化,因此您必须明确初始化它。