我有以下两种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的construtor很好,但Triangle3D的那个给了我一些警告,我无法在xcode中编译。错误说''Triangle3D的构造函数''必须显式初始化没有默认构造函数的成员'v2'。但是,我已经为Vertex3D类型的struct创建了一个构造函数。 Traingle3D中这个构造函数实际上有什么问题?我是否需要更改它,或者是否无法使用其他结构创建构造函数?
答案 0 :(得分: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.
}
答案 1 :(得分:2)
你的意思是?
struct Triangle3D{
Vertex3D v1;
Vertex3D v2;
Vertex3D v3;
Triangle3D(Vertex3D vt1, Vertex3D vt2, Vertex3D vt3): v1(vt1),v2(vt2),v3(vt3){
};