C ++ - 插入运算符,const关键字导致编译器错误

时间:2011-04-08 01:07:53

标签: c++ operator-overloading const

所以我正在建立一个班级,为了简单起见,我会在这里愚蠢。

这会产生编译器错误:“错误:对象具有与成员函数不兼容的类型限定符。”

这是代码:

ostream& operator<<(ostream& out, const Foo& f)
{
    for (int i = 0; i < f.size(); i++)
        out << f.at(i) << ", ";

    out << endl;
    return out;
}

at(int i)函数从索引i的数组返回一个值。

如果我从Foo中删除const关键字,一切都很好。为什么呢?

编辑:每个请求,成员函数的声明。

·H

public:
    int size(void);
    int at(int);

的.cpp

  int Foo::size()
    {
       return _size; //_size is a private int to keep track size of an array.
    }

    int Foo::at(int i)
    {
       return data[i]; //where data is an array, in this case of ints
    }

2 个答案:

答案 0 :(得分:9)

您需要将“at”函数和“size”函数声明为const,否则它们不能对const对象执行操作。

因此,您的功能可能如下所示:

int Foo::at(int i)
{
     // whatever
}

它需要看起来像这样:

int Foo::at(int i) const
{
     // whatever
}

答案 1 :(得分:0)

您正在调用一个更改常量对象上的对象的函数。您必须确保函数at不会更改类Foo的对象,方法是将其声明为const(或删除参数中的const以允许{ {1}}如果确实需要更改at中的某些内部数据,请执行任何操作。