写了一个String类,但是编译时提示如下错误:
test.cpp: In member function ‘String& String::operator=(const String&)’:
test.cpp:40: error: passing ‘const String’ as ‘this’ argument of ‘char* String::get()’ discards qualifiers
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class String{
public:
String(const char*str);
String(const String&str);
~String();
String&operator=(const String&str);
char*get(){return my;}
private:
char*my;
};
String::String(const char*str){
if(!str){
my=new char[1];
*my=0;
}else{
my=new char[strlen(str)+1];
strcpy(my,str);
}
}
String::String(const String&str){
my=new char[strlen(str.my)+1];
strcpy(my,str.my);
}
String::~String(){
delete []my;
}
String&String::operator=(const String&str){
if(this==&str)return *this;
delete []my;
my=new char[strlen(str.my)+1];
strcpy(my,str.get());
return *this;
}
int main(){
String*str=new String("hello world\n");
String*str1=new String(NULL);
printf(str->get());
*str1=*str;
printf(str1->get());
return 0;
}
|
但是把函数String&String::operator=(const String&str)
中的
str.get()
改成str.my
或者把
String&String::operator=(const String&str)中的const约束去掉也可以编译通过。
上网查了查,发现原来是编译器不能确定get()不会对str进行修改。所以解决办法是将
char*get(){return my;}
函数进行const约束。
即改成
char*get()const{return my;}
阅读(1643) | 评论(0) | 转发(0) |