在标头中声明对象

时间:2015-11-18 16:34:20

标签: c++ class object header

如何在不初始化的情况下声明对象?

这是我的头文件

    #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");

声明它时它会起作用

有什么问题?

2 个答案:

答案 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无法默认初始化,因此您必须明确初始化它。