我正在尝试使用复制构造函数创建一个非常简单的字符串类,我遇到的问题是我试图将数据类型/对象作为常量发送,但是每当我尝试将其分配给相同的非常量数据时,编译器抱怨。
我不明白为什么编译器会抱怨,我只是试图复制数据,我没有修改它。
header
class MyString{
private:
char* thestring;
MyString* ms;
public:
MyString();
MyString(const char* str);
MyString(const MyString& str);
~MyString();
MyString& operator=(const char* str);
};
CPP
MyString::MyString(){
thestring = '\0';
}
MyString::MyString(const MyString& str){
ms = str;
}
MyString& MyString::operator=(const char* str){
MyString* temp = new MyString();
temp->thestring = str;
return temp;
}
MyString::MyString(const char* str){
}
MyString::~MyString(){
}
这是错误:
最佳答案
首先,您无需在类中使用ms
成员:它没有任何作用,并且仅在(不正确的)副本构造函数中使用。删除ms
,然后重写代码,如下所示:
MyString::MyString(const MyString& str) {
thestring = strdup(str.thestring);
}
请注意,现在您的代码违反了rule of three:添加复制构造函数后,您还需要一个匹配的赋值运算符和一个析构函数:
MyString& MyString::operator=(const MyString& str) {
if (this != &str) {
free(thestring);
thestring = strdup(str.thestring);
}
return *this;
}
MyString::~MyString() {
free(thestring);
}
最后,我将像这样重写您的默认构造函数:
MyString::MyString()
: thestring(0) {
}
本质上,这没有什么不同,但是初始化列表更为规范。
关于c++ - 常量数据类型不能分配为非常量数据类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20277585/