为什么拷贝构造函数调用另一个类的默认构造函数?
-
20-09-2019 - |
题
我想知道为什么会发生这样的错误。
no matching function for call to 'Foo::Foo()'
在用于复制构造码?假定富只是与正常字段的对象(没有动态分配的存储器等),并且它定义了唯一的构造是一个构造函数一个参数。
我甚至不知道需要虽然要考虑的构造。如果代码说像
bar = thing.bar; //
和酒吧是富的类型,与上述的规格,不应只是产生浅拷贝,并用它做什么?为什么一个默认的构造函数需要调用?
解决方案
如果您不定义构造函数,编译器将生成一个默认的构造函数,但是如果你的不的定义构造函数(像拷贝构造函数)编译器的不会生成默认的构造函数,所以您需要定义构造函数了。
其他提示
这听起来像你没有定义任何其他构造函数定义的拷贝构造函数。
一旦你明确声明的构造函数,编译不再为您提供了一个默认的构造。因此,就不再有一个机制来构建在首位的类的对象(并因此将不能够进行复制)。
如果像你说的,你正在做的“像
bar = thing.bar;
这大概是在类的构造函数的副本中的体 - 所以bar
领域得到使用它的类的构造函数默认首先初始化,然后使用这个类的赋值操作符的这种说法。如果bar
的类只有一个拷贝构造函数,没有默认的构造函数,你需要添加之前类的拷贝构造函数开幕bar(thing.bar)
一个{
条款,并删除该任务(通常是一个好主意,无论如何,但根据强制性“无缺省构造函数” 条件)。
不隶属于 StackOverflow