c++ - 使用构造函数初始化结构中的结构

标签 c++ struct constructor

我试图通过发送另外两个结构来用构造函数初始化我的结构。

我的头文件 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) 
{ }

关于c++ - 使用构造函数初始化结构中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777763/

相关文章:

c++ - 如何在opencv中使用Multi-band Blender

c - scanf 到 struct 不起作用

c++ - 为类成员函数的结构输入设置默认值

scala - Scala 案例类的重载构造函数?

c++ - 使用 VB 进行人工智能

c++ - 如何将 "const_reverse_iterator"参数传递给 "std::vector::erase()"?

c++ - 复制模板化 vector

C# 如何通过反射设置 StructLayoutAttribute.Pack?

java - 在没有默认构造函数的情况下调试 XStream

c++ - 用空花括号初始化