Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++;将一个类传递到另一个类时没有默认构造函数错误';s构造函数 我写了一些C++类,其中一个类有另一个类的实例作为属性。在编写类构造函数时,我不断得到错误“没有类Foo的默认构造函数”。 下面是一个再现错误的小示例: class Foo { int size; char name; Foo(int s,char n) { size = s; name = n; } }; class Bar { int size; char name; Foo foo; Bar(int s, char n,Foo f){ size = s; name = n; foo = f; } };_C++_Constructor - Fatal编程技术网

C++;将一个类传递到另一个类时没有默认构造函数错误';s构造函数 我写了一些C++类,其中一个类有另一个类的实例作为属性。在编写类构造函数时,我不断得到错误“没有类Foo的默认构造函数”。 下面是一个再现错误的小示例: class Foo { int size; char name; Foo(int s,char n) { size = s; name = n; } }; class Bar { int size; char name; Foo foo; Bar(int s, char n,Foo f){ size = s; name = n; foo = f; } };

C++;将一个类传递到另一个类时没有默认构造函数错误';s构造函数 我写了一些C++类,其中一个类有另一个类的实例作为属性。在编写类构造函数时,我不断得到错误“没有类Foo的默认构造函数”。 下面是一个再现错误的小示例: class Foo { int size; char name; Foo(int s,char n) { size = s; name = n; } }; class Bar { int size; char name; Foo foo; Bar(int s, char n,Foo f){ size = s; name = n; foo = f; } };,c++,constructor,C++,Constructor,如果我删除Foo的类构造函数以便使用默认构造函数,错误就会消失。由于我正在将类Foo的一个现有实例传递到Bar的构造函数中,我不明白为什么这个错误会涉及Foo的构造函数。为什么会发生错误?如何修复代码?您应该通过初始化,而不是通过分配 //您可能希望它们是一个结构,而不是类。 //这样,默认情况下所有成员都是公共的。 结构Foo{ 整数大小; 字符名; Foo(ints,charn):大小{s},名称{n} }; 结构条{ 整数大小; 字符名; 富富,; 条(ints,charn,constfo

如果我删除Foo的类构造函数以便使用默认构造函数,错误就会消失。由于我正在将类Foo的一个现有实例传递到Bar的构造函数中,我不明白为什么这个错误会涉及Foo的构造函数。为什么会发生错误?如何修复代码?

您应该通过初始化,而不是通过分配

//您可能希望它们是一个结构,而不是类。
//这样,默认情况下所有成员都是公共的。
结构Foo{
整数大小;
字符名;
Foo(ints,charn):大小{s},名称{n}
};
结构条{
整数大小;
字符名;
富富,;
条(ints,charn,constfoo&f):大小{s},名称{n},Foo{f}
};
在初始化列表中不初始化成员变量时,这与默认情况下构造成员变量然后重新赋值相同。所以你无缘无故地做了两倍的工作。(另见)

由于已为结构定义了构造函数,因此默认构造函数将被隐式删除,从而导致编译错误

另一方面,您甚至可能不需要这些构造函数,而是可以使用,如下所示:

structfoo{
整数大小;
字符名;
};
void示例(){
Foo Foo={1,'a'};//the=是可选的
}

感谢您的帮助:)为什么我们要在Bar的初始化列表中使用Foo前面的常量关键字?@ducksforever这意味着我们将
Foo
作为
const
参考。这样可以避免不必要的副本。一般来说,不把每件事都当作一种价值是一种很好的做法,在这种情况下,它不会有太大的区别。