成员是非const的,成员的成员函数是非const的,当在const成员函数上调用该成员时,会产生错误,并抱怨:
error: passing 'const foo' as 'this' argument discards qualifiers [-fpermissive]
代码:
// this class is in library code i cannot modify it
class CWork {
public:
const string work(const string& args) { // non const
...
return "work";
}
};
// this is my code i can modify it
class CObject {
private:
CWork m_work; // not const
public:
const string get_work(const string& args) const { // const member function
return m_work.work(args); // error here
}
};
这是为什么以及如何解决? 编译器为g ++ 5.3.1。
答案 0 :(得分:1)
在const
方法内,对象(*this
)及其所有成员均为const
。想想看,如果不是这种情况,那么对象const
就没有任何意义。
因此m_work
在const
中是get_work
,您只能在其上调用const
方法。
使work
也是一种const
方法。没有明显的理由使它不为const
,默认情况下,您应使方法为const
。仅当需要修改对象时,才将它们设置为非{const
。
它在库中,我无法更改。
在这种情况下,您很不走运。您也只能使get_work
为非常量,因为work
似乎修改了m_work
因此修改了CObject
,而您在const
方法中无法做到这一点。>