对象引用前加const 报错

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 15:14   84   0
/*
    error: 不能将"this"指针从"const Foo"转换为"Foo &"
    class Foo
    {
    public:
     Foo () :a (1) {}
     int get_value () { return a; }
    private:
     int a;
    };

    ostream &operator<<(ostream &os, const Foo &f)
    {
     os << "the Foo's value is: "
         << f.get_value ();//error occur
     return os;
    }
    const Foo &f相当于一个const对象,
    由于const对象在调用成员函数的时候,会将this指针强行转换为const this,
    所以它将无法找到相应的const get_value()函数,
    并且编译器也无法将一个const的对象转化为一个普通对象
    来调用这个普通的get_value()方法,
    所以就会产生如题的编译错误
    solve:
    get_value(){} -> get_value const{}
*/
#include 

using std::cout;
using std::endl;
using std::ostream;

class Foo
{
public:
 Foo () :a (1) {}
 int get_value () const{ return a; }
private:
 int a;
};

ostream &operator<<(ostream &os, const Foo &f)
{
 os << "the Foo's value is: " << f.get_value ();
 return os;
}
int main ()
{
 std::ios::sync_with_stdio (false);
 Foo foo;
 cout << foo << endl;
 return 0;
}
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP