Chinaunix首页 | 论坛 | 博客
  • 博客访问: 153939
  • 博文数量: 37
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-13 18:49
文章分类

全部博文(37)

文章存档

2010年(1)

2009年(19)

2008年(17)

我的朋友

分类: C/C++

2008-10-19 17:53:42

写了一个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;}

阅读(1583) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~