我试图覆盖>>我自己的Array类的运算符:
std::istream& operator>>(std::istream& input, Array& array) {
for (int i = 0; i < array.size; i++)
input >> array[i];
return input;
}
但我成了以下错误:
的std :: istream的&安培; Array :: operator&gt;&gt;(std :: istream&amp;,const Array&amp;)' 必须采取一个参数
我见过的所有例子都是这样实现的。我不知道,为什么编译器需要一个真正的参数呢? 我该怎么办?
答案 0 :(得分:3)
如果operator>>
是该类的成员,它将在Array
对象上运行并获取您给出的参数:
Array a;
a >> whatever;
您似乎希望istream
写入其中,这意味着它不是成员,因此要么将其移到课外,要么将其声明为friend
(这有效地使它是非会员):
class Array
{
//.........
friend std::istream& operator>>(std::istream& input, Array& array) {
for (int i = 0; i < array.size; i++)
input >> array[i];
return input;
}
};
答案 1 :(得分:0)
在类中定义时,二元运算符函数应该只有一个参数(因为左侧参数是隐式*this
)。您必须将提取器定义为自由函数,您可以通过在类外部定义它来执行此操作。此外,如果提取器需要访问私有变量,您可以在类中定义/声明它为friend
。