我有下一個錯誤,當我嘗試編譯我的代碼:錯誤:調用隱含缺失的拷貝構造函數「卡德納」
./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(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'副本,由於錯誤信息中解釋的原因,這是不可能的。也許你需要提供一個複製構造函數,或者明確地默認一個? – Praetorian
有效地,我刪除了複製構造函數,我相信移動構造函數與複製函數具有相同的功能。謝謝! –
不,複製和移動是兩個非常不同的操作,複製時需要複製構造函數。你可以修改你的代碼,把違規行改成'Cadena direccion()const {return std :: move(direccion_); '',但這可能不是你想要的行爲。 – Praetorian