所以我正在建立一个班级,为了简单起见,我会在这里愚蠢。
这会产生编译器错误:“错误:对象具有与成员函数不兼容的类型限定符。”
这是代码:
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
}
答案 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
中的某些内部数据,请执行任何操作。