初始化custormer类型的对象的向量时,复制构造函数错误

前哨

Foo只有一个默认构造函数和一个复制构造函数。由类型的对象初始化的大小为10的向量在Foo某种程度上是不正确的。

#include <iostream>
#include <vector>

class Foo
{
    public:
        Foo() = default; // Error1
        Foo(Foo& foo) {  // Error2
            std::cout << "copied" << std::endl;
        }

};

int main( void )
{
    Foo f;
    std::vector<Foo> vec(10, f); // Error3
    return 0;
}

上面的示例代码有3个错误:

错误1:候选构造函数不可行:需要0个参数,但提供了1个

错误2:候选构造函数不可行:第一个参数('const Foo')将失去const限定词

错误3:此处实例化成员函数'std :: __ 1 :: vector> :: vector'

当我在主函数中删除复制构造函数或向量时,没有错误。

题:

代码的哪一部分是错误的,为什么?

ps

当向量定义替换为时Foo ff(f),错误也消失了。const预选赛是由向量请求?

丹尼尔·兰格

查看以下调用的构造函数的签名std::vector

vector(size_type n, const T& value, const Allocator& = Allocator());

该参数f由const引用(参数value传递因此,该参数不能绑定到复制构造函数foo类型Foo&非常量参数Foo


相同(更简单)的情况:

Foo f;
const Foo& value = f;
Foo& foo = value;  // error

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用函数的返回值初始化对象时未调用复制构造函数

为什么对象的初始化调用复制构造函数?

初始化对象类型构造函数oracle

错误的数组初始化与赋值复制构造函数初始化

CRTP的初始化程序列表构造函数错误

复制构造函数错误:对象具有与成员函数不兼容的类型限定符

c++ 中的初始化没有匹配的构造函数错误。我的构造函数有什么问题?

用一个元素初始化向量是否需要复制构造函数?

向量构造函数对:初始化列表与显式构造

如何在类的构造函数中初始化对象的2D向量?(C ++)

(Re)在cpp中初始化没有复制构造函数的对象

构造类型的向量并对其进行初始化

在引用初始化中使用已删除的复制构造函数进行复制初始化

删除类的复制构造函数时,初始化类的数组成员

空向量的构造函数列表初始化

在类构造函数中初始化const向量(C ++)

在构造函数 C++ 中初始化结构向量

使用构造函数的参数初始化向量成员

在 sfml 的构造函数中初始化向量数组

委托复制构造函数和const数据初始化

复制构造函数是否重新初始化文件成员

初始化,复制构造函数和赋值

使用复制构造函数初始化new []

无法在复制构造函数中初始化数组

复制构造函数花括号初始化

非原始成员初始化中的复制构造函数

对象初始化 - 构造函数的类类型和方法访问的关系

如何使用实现父接口的类中的构造函数初始化接口类型的对象?

无法从委派构造函数的初始化列表中初始化向量