用构造函数初始化结构中的结构
Struct within a struct initialization with constructor
我试图通过发送两个其他结构来初始化我的构造函数。
my头文件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
my code 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)
{ }
既然您定义了自定义的Vertex3D(float,float,float)
构造函数,那么编译器将不再为您创建默认构造函数。Edge
的v2
和v3
成员的默认初始化试图调用不存在的构造函数,因此出现错误。
应该像这样初始化类成员,以避免不必要的复制并修复错误:
Vertex3D::Vertex3D(float x0, float y0, float z0) : x(x0), y(y0), z(z0) { }
相关文章:
- 多成员Constexpr结构初始化
- 为什么用结构初始化数组需要指定结构名称
- 使用指定的初始值设定项聚合匿名结构初始化
- 不同的类或结构初始化方法之间的性能差异是什么?
- 如何在结构初始化中获取成员C++
- C++正确的结构初始化
- 使用大括号进行结构初始化
- 内部结构初始化不起作用 - C++
- 使用嵌套结构初始化并集
- 使用匿名结构初始化联合
- 结构初始化语法
- 结构初始化的 C++ 向量
- C++嵌套结构初始化和访问成员
- 结构初始化中的常量正确性
- 使用 C++ 中的自定义元素进行 Const 结构初始化
- 如何在结构C++初始化内置数组
- Visual C++ 模板类成员结构初始化语法糖
- C++结构初始化
- C 在结构初始化过程中带有内部阵列的奇怪错误
- 此C/C 的结构初始化器如何使用足够的字段工作