我的第一条评论,我建议删除所有*
s 和new
.
因此,主要功能变为:
int main()
{
Directory dir = Directory("alex");
Directory dir2;
dir2 = dir; // <-- fixed, original was: dir = dir2;
cout<<"done"<<endl;
return 0; // <-- fixed, return is strictly recommended for every non-void function
}
正在编译...
错误Directory dir = Directory("alex");
:(使用已删除的复制构造函数)出了点问题。
复制构造函数用于初始化dir
由Directory("alex")
.
这很容易改变:
int main()
{
Directory dir("alex"); // <-- fixed: direct construction
Directory dir2;
dir2 = dir;
cout<<"done"<<endl;
return 0;
}
正在编译...
错误: 中出了点问题Directory dir2;
。
是的。您定义了构造函数Directory(string name);
。这会抑制此处需要的默认构造函数的自动创建。
我们可以将默认构造函数添加到class Directory
:
Directory() = default;
或者我们可以改进现有的非默认构造函数,使其也可以用作默认构造函数:
Directory(string name = string()): name(name) { }
整个来源:
#include <iostream>
#include <string>
using namespace std;
class Directory{
string name;
public:
Directory(string name = string()):name(name) {
}
~Directory() {
cout << "Deleting was called" <<endl;
}
Directory& operator=(Directory& other){
cout << "cp assigment" <<endl;
return *this;
}
Directory& operator=(Directory&& other){
cout << "move assigment" <<endl;
return *this;
}
};
int main() {
//Directory dir = Directory("alex");
Directory dir("alex");
Directory dir2;
dir2 = dir;
cout<<"done"<<endl;
// your code goes here
return 0;
}
现在,它编译并工作。
输出:
cp assigment
done
Deleting was called
Deleting was called
你可以在ideone上看到它。