在标头中声明对象
Declare object in 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。
着色器仅为标头,当我通过kaarez::graphics::Shader terrainShader("vertex.txt", "fragment.txt");
在主方法中声明它时,它就可以工作
怎么了?
初始化构造函数成员初始化器列表中的成员变量,如下所示:
Renderer::Renderer() : m_terrainShader("vertex.txt", "fragment.txt") {
}
您需要在类初始值设定项列表中初始化m_terrainShader
,因为它不是默认可构造的。
Renderer::Renderer() : m_terrainShader("vertex.txt", "fragment.txt"){}
必须这样做的原因是,当您输入构造函数的主体时,所有类成员都已初始化。由于m_terrainShader
不能默认初始化,您必须显式初始化它。
这可能不是一个确切的答案(而且已经晚了很多年),但在C++11或更高版本中,您可以使用唯一指针(或共享指针)。
在标题do中:
unique_ptr<Treaderkaarez::graphics::Shader> m_terrainShader;
在代码中做
m_terrainShader.reset(new kaarez::graphics::Shader("vertex.txt", "fragment.txt"));
它比指针更安全,因为你不必担心删除它失败或在不分配它的情况下删除它。
相关文章:
- Arduino C++在构造函数中用参数声明对象数组
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 如何在 if 语句中声明对象并在任何我想的地方使用它?
- 如何使用unique_ptr和make_unique正确声明对象数组
- 声明对象时,如何在C 中修复C2065错误
- 声明对象而不调用默认构造函数
- 一旦对象设置为 null,用于声明对象的堆大小的变量就设置为 null?
- 我可以使用名称而不是类型来声明对象文字吗?
- 在制作(Qt等)GUI时声明对象
- 在基本的GUI编程中,在哪里声明对象和方法
- 同时使用模板和参数声明对象
- "Undefined reference to"使用双模板类声明对象时出错
- 在头文件 C++ 中声明对象
- 在其类中声明对象
- C 可以通过使用要求其为某个类别的对象来声明对象
- 声明对象
- (C++)如何基于条件声明对象类成员
- 使用变量声明对象的名称
- C++ OOP 体系结构:决定是从基类声明对象还是继承基类
- 在声明对象之前在全局函数中使用类的成员函数