我有以下两个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.
}