c++编译时出现discards qualifiers [-fpermissive]的错误

代码:

class HasPtr{
public:
    HasPtr(const string &s = string()):ps(new string(s)),i(0){}
    HasPtr(const HasPtr &p){
        ps = new string(p.getPs());
        i = p.i;
    }

    const string getPs(){
        return *ps;
    }
private:
    string *ps;
    int i;
};

error:

error: passing 'const HasPtr' as 'this' argument of 'const string HasPtr::getPs()' discards qualifiers [-fpermissive]|

 

在写HasPtr类的拷贝构造函数时发生了上述错误,找了很久没找出来,最后才发现拷贝构造函数传入的是一个常量引用,而常量引用不能够调用非常量成员函数。

太心酸了,之前还记录了一篇关于常量成员函数的限制,一写就忘。

知道错误就简单了

class HasPtr{
public:
    HasPtr(const string &s = string()):ps(new string(s)),i(0){}
    HasPtr(const HasPtr &p){
        ps = new string(p.getPs());
        i = p.i;
    }

    const string getPs() const{
        return *ps;
    }
private:
    string *ps;
    int i;
};

 

你可能感兴趣的:(c/c++)