通过复制其他对象来创建新类时遇到了一些问题。从我可以看到,下面的代码工作,但是我的编译器指出它缺少类材料的默认构造函数。从我所看到的情况来看,这不是必需的。我在这里做错了什么?C++通过构造函数复制对象
第一类的构造函数:
shadingBatch::shadingBatch(const vertexAttribLayout& layout, const material& batchMaterial){
dataFormat_ = layout;
batchMaterial_ = *(new material(batchMaterial));
}
我也曾尝试
shadingBatch::shadingBatch(const vertexAttribLayout& layout, const material& batchMaterial){
dataFormat_ = layout;
batchMaterial_ = batchMaterial;
}
但返回相同的编译器错误。
第二类定义
class material {
protected:
shader shader_;
public:
material (const shader* shaderProgram);
material (const material&);
~material();
void compileShader();
} ;
二等拷贝构造函数
material::material(const material& other){
shader_ = *(new shader(other.shader_));
}
编辑:按照要求,
第一类定义
class shadingBatch {
friend class cheeseRenderer;
protected:
std::vector<primitive*> primitives_;
std::vector<vertex> vertices_;
std::vector<GLuint> elements_;
vertexAttribLayout dataFormat_;
material batchMaterial_;
GLuint VAO_;
GLuint VBO_;
GLuint EBO_;
public:
~shadingBatch();
GLuint updateBatch (void);
void addPrimitive (primitive*);
shadingBatch(const vertexAttribLayout&, const material&);
private:
void updatePrimitives (void);
void setVertexAttributes(void);
} ;
而且其中构建或被称为:
shader* defaultShader = new shader(fragmentSource,vertexSource);
material* defaultMaterial = new material(defaultShader);
vertexAttribLayout* defaultVertexData = new vertexAttribLayout();
shadingBatch* batch = new shadingBatch(*defaultVertexData,*defaultMaterial);
cheeseRenderer renderer(*batch);
请添加错误信息。当你错过一个默认的构造函数时,你的编译器的真实时间为99.999999%。通常,一个类将缺少的默认构造函数类作为成员,并且不会在类中正确初始化该成员。 –
你能告诉我们'shadingBatch'的定义和它的构造函数的调用吗? –
除非你真的需要,否则不要使用'new',并且你知道你在做什么。目前,这只是造成麻烦和资源泄漏。 – juanchopanza