他のオブジェクトをコピーして新しいクラスを作成する際にいくつか問題があります。私が見る限り、以下のコードは機能しますが、私のコンパイラは、クラス マテリアルのデフォルト コンストラクタがないと述べています。私が見ることができるものから、これは必要ありません。私はここで何か間違っていますか?
ファーストクラスのコンストラクター:
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();
} ;
2 番目のクラスのコピー コンストラクター
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);