结构的构造函数

Constructor for the structure

本文关键字:构造函数 结构      更新时间:2023-10-16

我有以下两个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 ?我是否需要改变它,或者它是不可能创建一个构造函数与一些其他结构?

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

解决这个问题的一种方法是默认构造函数的所有参数:
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.
}

你的意思是?

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