我试图通过发送另外两个结构来使用构造函数初始化我的结构。
我的头文件Datatypes.h:
#ifndef __DATATYPES_H__
#define __DATATYPES_H__
struct Vertex3D {
float x,y,z;
Vertex3D(float x0, float y0, float z0);
};
struct Edge {
Vertex3D v0, v1;
Edge(Vertex3D v2, Vertex3D v3);
};
#endif
我的代码Datatypes.cc
#include "Datatypes.h"
using namespace std;
Vertex3D::Vertex3D(float x0, float y0, float z0) {
x = x0;
y = y0;
z = z0;
}
Edge::Edge(Vertex3D v2, Vertex3D v3) {
v0 = v2;
v1 = v3;
当我尝试编译时会发生此问题,并且似乎编译器尝试在.cc文件中调用空的构造函数。
所以这不行吗?
最佳答案
Edge::Edge(Vertex3D v2, Vertex3D v3) {
v0 = v2;
v1 = v3;
}
如果您没有在构造函数初始化列表中为数据成员指定初始值设定项,则它们将是默认构造的。
Vertex3D
对象没有默认的构造函数,因此会出现编译器错误。您应该通过初始化初始化列表中的成员来解决此问题:
Edge::Edge(Vertex3D v2, Vertex3D v3)
: v0(v2), v1(v3)
{ }