我想知道为什么会发生这样的错误。

no matching function for call to 'Foo::Foo()'

在用于复制构造码?假定富只是与正常字段的对象(没有动态分配的存储器等),并且它定义了唯一的构造是一个构造函数一个参数。

我甚至不知道需要虽然要考虑的构造。如果代码说像

bar = thing.bar; //

和酒吧是富的类型,与上述的规格,不应只是产生浅拷贝,并用它做什么?为什么一个默认的构造函数需要调用?

有帮助吗?

解决方案

如果您不定义构造函数,编译器将生成一个默认的构造函数,但是如果你的的定义构造函数(像拷贝构造函数)编译器的不会生成默认的构造函数,所以您需要定义构造函数了。

其他提示

这听起来像你没有定义任何其他构造函数定义的拷贝构造函数。

一旦你明确声明的构造函数,编译不再为您提供了一个默认的构造。因此,就不再有一个机制来构建在首位的类的对象(并因此将不能够进行复制)。

如果像你说的,你正在做的“像

bar = thing.bar;

这大概是在类的构造函数的副本中的 - 所以bar领域得到使用它的类的构造函数默认首先初始化,然后使用这个类的赋值操作符的这种说法。如果bar的类只有一个拷贝构造函数,没有默认的构造函数,你需要添加之前类的拷贝构造函数开幕bar(thing.bar)一个{条款,并删除该任务(通常是一个好主意,无论如何,但根据强制性“无缺省构造函数” 条件)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top