0

我有以下两个 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 中的这个构造函数实际上有什么问题?我需要更改它,还是无法使用其他结构创建构造函数?

4

2 回答 2

7

但是您没有提供 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.
}
于 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 回答