Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用构造函数初始化结构中的结构_C++_Struct_Constructor - Fatal编程技术网

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

C++ 使用构造函数初始化结构中的结构,c++,struct,constructor,C++,Struct,Constructor,我试图通过发送另外两个结构来用构造函数初始化我的结构 我的头文件数据类型.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 我的代

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

我的头文件数据类型.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) 
{ }
如果未在构造函数初始化列表中为数据成员指定初始值设定项,则它们将被默认构造。Vertex3D对象没有默认构造函数,因此会出现编译器错误

您应该通过初始化初始化列表中的成员来解决此问题:

Edge::Edge(Vertex3D v2, Vertex3D v3) 
  : v0(v2), v1(v3) 
{ }

由于您定义了自定义Vertex3Dfloat、float、float构造函数,编译器将不再为您创建默认构造函数。Edge的v2和v3成员的默认初始化尝试调用不存在的构造函数,因此出现错误

您应该像这样初始化类成员,以避免不必要的复制并修复错误:

Vertex3D::Vertex3D(float x0, float y0, float z0) : x(x0), y(y0), z(z0) { }

由于您定义了自定义Vertex3Dfloat、float、float构造函数,编译器将不再为您创建默认构造函数。Edge的v2和v3成员的默认初始化尝试调用不存在的构造函数,因此出现错误

您应该像这样初始化类成员,以避免不必要的复制并修复错误:

Vertex3D::Vertex3D(float x0, float y0, float z0) : x(x0), y(y0), z(z0) { }

请在您的问题中发布完整的编译器错误。请在您的问题中发布完整的编译器错误。感谢此修复了我的问题:感谢此修复了我的问题: