Chinaunix

标题: const 报错 [打印本页]

作者: zhongyj    时间: 2008-10-31 15:47
标题: const 报错
#include <string>
using std::string;

class A
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;inline const string& get()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return m_str;
&nbsp;&nbsp;&nbsp;&nbsp;}

private:
&nbsp;&nbsp;&nbsp;&nbsp;string m_str;
};

class B
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;void fun(const A& a)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string tmp = a.get();
&nbsp;&nbsp;&nbsp;&nbsp;}
};

在linux下g++编译报错
const.cpp: In member function 'void B::fun(const A&)':
const.cpp:21: error: passing 'const A' as 'this' argument of 'const std::string& A::get()' discards qualifiers

在solaris下报错
"const.cpp", line 21: Error: Non-const function A::get() called for const object.

而如果在get函数后面加上const就好了,这是怎么回事
另外如果不是作为函数参数是没有问题的
作者: emacsnw    时间: 2008-10-31 15:57
fun的参数是const A &a,因此只能调用a的const成员函数,否则不能保证不改变a的成员。
作者: zhongyj    时间: 2008-10-31 16:19
标题: 回复 #2 emacsnw 的帖子
明白了
下面是一个另外一个例子
#include <string>
using std::string;

class A
{
public:
    inline const string& get()
    {
        return m_str;
    }

private:
    string m_str;
};

int main()
{
    const A a;
    a.get();
    return 0;
}
这个也会报错
如果把const A a;的const就可以

就是const对象只能调用const函数,即使函数中并没有改变成员变量值




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2