c ++覆盖>>数组类的运算符

时间:2014-04-04 22:45:39

标签: c++ arrays override istream

我试图覆盖>>我自己的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;)'   必须采取一个参数

我见过的所有例子都是这样实现的。我不知道,为什么编译器需要一个真正的参数呢? 我该怎么办?

2 个答案:

答案 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

相关问题