0

次の 2 つの C++ 構造があります。

struct Vertex3D{
    GLfloat x;
    GLfloat y;
    GLfloat z;
    Vertex3D(GLfloat a, GLfloat b, GLfloat c){
        x = a;
        y = b;
        z = c;
    }
};

struct Triangle3D{
    Vertex3D v1;
    Vertex3D v2;
    Vertex3D v3;
    Triangle3D(Vertex3D vt1, Vertex3D vt2, Vertex3D vt3){

    };

};

Vertex3D のコンストラクターは問題ありませんが、Triangle3D のコンストラクターでは警告が表示され、xcode でコンパイルできません。エラーには、「'Triangle3D' のコンストラクターは、既定のコンストラクターを持たないメンバー 'v2' を明示的に初期化する必要があります」と表示されます。しかし、Vertex3D タイプの構造体のコンストラクターを作成しました。Traangle3D のこのコンストラクタの実際の問題点は何ですか? それを変更する必要がありますか、それとも他の struct でコンストラクターを作成することはできませんか?

4

2 に答える 2

7

しかし、DEFAULT コンストラクター (つまり、引数なしで呼び出すことができるコンストラクター) を提供していません。

これを修正する 1 つの方法は、コンストラクターのすべての引数をデフォルトにすることです。

Vertex3D(GLfloat a = 0.0, GLfloat b = 0.0, GLfloat c = 0.0){
    ...
}

しかし、おそらく、三角形の各メンバーを明示的に初期化する必要があります。

Triangle3D(Vertex3D vt1, Vertex3D vt2, Vertex3D vt3)
    : v1(vt1), v2(vt2), v3(vt3)
{
    // Probably don't need code here.
}
于 2013-01-09T20:02:20.447 に答える
2

もしかして?

struct Triangle3D{
    Vertex3D v1;
    Vertex3D v2;
    Vertex3D v3;
    Triangle3D(Vertex3D vt1, Vertex3D vt2, Vertex3D vt3): v1(vt1),v2(vt2),v3(vt3){

    };
于 2013-01-09T20:09:08.090 に答える