错误:调用“ Cadena”的隐式删除副本构造函数

凯克·通用

我尝试编译代码时遇到下一个错误:

./usuario.h:64:37: error: call to implicitly-deleted copy constructor of 'Cadena'
                Cadena direccion() const { return direccion_; }
                                                  ^~~~~~~~~~
./../P1/Cadena/cadena.h:11:3: note: copy constructor is implicitly deleted because 'Cadena' has a user-declared move constructor
                Cadena(Cadena&& c);
usuario.cpp:14:3: error: call to implicitly-deleted copy constructor of 'Cadena'
         nombre_(nombre), apellidos_(apellidos), direccion_(direccion), password_(password){
         ^       ~~~~~~

Cadena中的构造函数为:

Cadena(const size_t t=0, const char c=' ');
Cadena(Cadena&& c);
Cadena(const char* c);

和移动构造函数:

Cadena::Cadena(Cadena&& c) : tam_(c.tam_) {
    cadena_ = new char[tam_+1];
    strcpy(cadena_, c.cadena_);    
    c.tam_=0;
    delete[] c.cadena_;
    c.cadena_ = new char[1];
    c.cadena_ = "";
}

usuario.h中的声明是:

//........
public:
     Cadena id() const { return id_; }
//....
private:
     Cadena direccion_;

Cadena类可以完美地工作,但是现在我需要使用它,并且编译器会丢弃这些错误。我认为我没有做任何特别的事情,只返回/分配了Cadena类型的对象。

我期待您的反馈,

最好的祝福。

TemplateRex

仅出于完整性考虑,标准要求您的编译器警告行为:

12.8复制和移动类对象[class.copy]

7如果类定义未明确声明一个副本构造函数,则将隐式声明一个副本构造函数。如果类定义声明了move构造函数或move赋值运算符,则隐式声明的副本构造函数将被定义为Delete;否则,将其定义为默认值(8.4)。如果该类具有用户声明的副本分配运算符或用户声明的析构函数,则不建议使用后者。

因此,如果要复制行为,则必须自己提供一个复制构造函数和一个复制赋值运算符。

但是,查看一下您的move构造函数,它似乎没有提供任何移动语义,而是提供了深度复制(提示:做strcopy()什么?确定不会移动)。因此,我将您当前的move构造函数重命名为copy构造函数,并提供一个实际移动的新move构造函数(即,重新分配char指针或类中实际数据的句柄)。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调用LLVM中隐式删除的副本构造函数

来自分类Dev

gmock调用到隐式删除的副本构造函数

来自分类Dev

尝试将参数传递给方法时出现“调用隐式删除的副本构造函数”错误

来自分类Dev

隐式删除的副本构造函数编译错误,返回的指针值

来自分类Dev

拦截C ++隐式副本构造函数,或调用其功能

来自分类Dev

这是隐式调用副本构造函数吗?

来自分类Dev

错误:隐式声明的副本构造函数的定义

来自分类Dev

从定义的副本构造函数调用默认(隐式)副本构造函数

来自分类Dev

移动构造函数(错误:调用隐式删除的拷贝构造函数)

来自分类Dev

为什么类中的ostringstream类型的成员导致“调用隐式删除的复制构造函数”错误?

来自分类Dev

C ++隐式转换构造函数调用

来自分类Dev

C ++隐式和显式继承构造函数调用

来自分类Dev

隐式与显式默认构造函数调用

来自分类Dev

隐式与显式删除副本构造函数

来自分类Dev

如何隐式调用父类的构造函数

来自分类Dev

为什么C ++隐式调用父默认构造函数?

来自分类Dev

隐式调用超类中的无参数构造函数

来自分类Dev

隐式构造函数调用还是什么?

来自分类Dev

显式副本构造函数编译错误

来自分类Dev

隐式调用函数

来自分类Dev

Ninject泛型集合的隐式构造函数绑定错误

来自分类Dev

Java错误:隐式超级构造函数未定义。必须显式调用另一个构造函数

来自分类Dev

Java错误:隐式超级构造函数未定义。必须显式调用另一个构造函数

来自分类Dev

构造函数在错误的时间被调用

来自分类Dev

构造函数在错误的时间被调用

来自分类Dev

自己调用副本构造函数

来自分类Dev

与基类构造函数相比,什么时候调用Java隐式构造函数?

来自分类Dev

让隐式派生类构造函数调用基类构造函数

来自分类Dev

clang错误:注意:候选构造函数(隐式move构造函数)不可行:

Related 相关文章

  1. 1

    调用LLVM中隐式删除的副本构造函数

  2. 2

    gmock调用到隐式删除的副本构造函数

  3. 3

    尝试将参数传递给方法时出现“调用隐式删除的副本构造函数”错误

  4. 4

    隐式删除的副本构造函数编译错误,返回的指针值

  5. 5

    拦截C ++隐式副本构造函数,或调用其功能

  6. 6

    这是隐式调用副本构造函数吗?

  7. 7

    错误:隐式声明的副本构造函数的定义

  8. 8

    从定义的副本构造函数调用默认(隐式)副本构造函数

  9. 9

    移动构造函数(错误:调用隐式删除的拷贝构造函数)

  10. 10

    为什么类中的ostringstream类型的成员导致“调用隐式删除的复制构造函数”错误?

  11. 11

    C ++隐式转换构造函数调用

  12. 12

    C ++隐式和显式继承构造函数调用

  13. 13

    隐式与显式默认构造函数调用

  14. 14

    隐式与显式删除副本构造函数

  15. 15

    如何隐式调用父类的构造函数

  16. 16

    为什么C ++隐式调用父默认构造函数?

  17. 17

    隐式调用超类中的无参数构造函数

  18. 18

    隐式构造函数调用还是什么?

  19. 19

    显式副本构造函数编译错误

  20. 20

    隐式调用函数

  21. 21

    Ninject泛型集合的隐式构造函数绑定错误

  22. 22

    Java错误:隐式超级构造函数未定义。必须显式调用另一个构造函数

  23. 23

    Java错误:隐式超级构造函数未定义。必须显式调用另一个构造函数

  24. 24

    构造函数在错误的时间被调用

  25. 25

    构造函数在错误的时间被调用

  26. 26

    自己调用副本构造函数

  27. 27

    与基类构造函数相比,什么时候调用Java隐式构造函数?

  28. 28

    让隐式派生类构造函数调用基类构造函数

  29. 29

    clang错误:注意:候选构造函数(隐式move构造函数)不可行:

热门标签

归档