C++ 在const函数中的非const成员上调用非const函数
该成员为非常量,且该成员的成员函数为非常量,当对常量成员函数调用该成员函数时,它将生成错误,并抱怨:C++ 在const函数中的非const成员上调用非const函数,c++,g++,constants,member-functions,C++,G++,Constants,Member Functions,该成员为非常量,且该成员的成员函数为非常量,当对常量成员函数调用该成员函数时,它将生成错误,并抱怨: error: passing 'const foo' as 'this' argument discards qualifiers [-fpermissive] 代码: 这是为什么?如何解决? 编译器是g++5.3.1。在const方法中,对象(*this)及其所有成员都是const。想想看,如果不是这样的话,那么一个对象是const就没有任何意义了 因此,m_-work是const内部的ge
error: passing 'const foo' as 'this' argument discards qualifiers [-fpermissive]
代码:
这是为什么?如何解决?
编译器是g++5.3.1。在
const
方法中,对象(*this
)及其所有成员都是const
。想想看,如果不是这样的话,那么一个对象是const
就没有任何意义了
因此,m_-work
是const
内部的get_-work
,您只能对其调用const
方法
使工作
也是一种const
方法。没有明显的理由使其不是const
,默认情况下,您应该使方法const
。仅当需要修改对象时,才将其设置为非常量
它在图书馆里,我不能换
那样的话,你就不走运了。您也只能使
get\u work
非常量,因为work
似乎会修改m\u work
,因此会修改CObject
,这是在const
方法中无法执行的。对不起,get\u work是一个常量函数,在该函数中失败。在常量成员*中,这是常量。所以它的所有成员数据都太…m_-work
isconst
insideget_-work
lol为什么所有的否决投票,我问是因为我遇到了这个问题,因为首先你发布了与错误无关的错误代码,现在不清楚问题是什么。您不能对const
对象调用非常量方法,这就是错误告诉您的。。。
// 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
}
};