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
is
const
inside
get_-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
    }
};