通過複製其他對象來創建新類時遇到了一些問題。從我可以看到,下面的代碼工作,但是我的編譯器指出它缺少類材料的默認構造函數。從我所看到的情況來看,這不是必需的。我在這裏做錯了什麼?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