我有以下两个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类型的结构创建了一个构造函数。 Traingle3D中的此构造函数实际上有什么问题?我需要更改它,还是不能用其他结构创建构造函数?

最佳答案

但是您没有提供DEFAULT构造函数(即可以不带参数调用的构造函数)。

解决此问题的一种方法是默认使用构造函数的所有参数:

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.
}

10-08 05:56