错误:在'&'标记之前预期','或'...'

时间:2012-11-05 07:54:14

标签: c++ operator-overloading

错误:

expected ‘,’ or ‘...’ before ‘&’ token
randomNumberMagnifier.h:32: error: ISO C++ forbids declaration of ‘randomNumberMagnfier’ with no type
randomNumberMagnifier.h:32: error: ‘std::ostream& randomNumberMagnifier::operator<<(std::ostream&, int)’ must take exactly one argument
[singha1@cs1 p4]$ 

这是一直出现的错误。我几乎复制了重载operator<<的代码,用于打印用户这些操作符的值。

·H

#ifndef RANDOMNUMBERMAGNIFIER_H
#define RANDOMNUMBERMAGNIFIER_H
#include <iostream>
#include <fstream>

using namespace std;
class randomNumberMagnifier
{
  int addFactor;
  int multFactor;
  bool addOn;
  bool multOn;
  int randomNumber;
  static const int MAX_ADD_FACTOR = 100;
  static const int MAX_MULT_FACTOR = 20;
  static const int MAX_RANDOM = 200;

 public:
  randomNumberMagnifier();

  randomNumberMagnifier(const randomNumberMagnifier& arandom);
  //~randomNumberMagnifer();                                                         

  randomNumberMagnifier& operator=(const randomNumberMagnifier& rhs );
  //  randomNumberMagnifier& operator==(const randomNumberMagnfier& rhs );           
  ostream&  operator<<(ostream& o, const randomNumberMagnfier& rhs );
  randomNumberMagnifier(bool aState, bool mState);

  int randomMagnifier();

  int getAdd();
  int getMult();

  bool getAddState();
  bool getMultState();

  int getRandomNumber();

  void display(ostream& out) const;



};
#endif

的.cpp:

ostream& operator<<(operator& out, const randomNumberMagnifier& rhs)
{
  rhs.display(out);
  return out;
  //cout << this->getAdd()=rhs.getAdd();                                                  
  /*                                                                                      
  cout << this->multFactor;                                                               
  cout << this->addOn;                                                                    
  cout << this->multOn;                                                                   
  cout << this->randomNumber;                                                             
  */
}

void randomNumberMagnifier :: display(ostream& out)const
{
  out << addFactor << multFactor << randomNumber;
}

1 个答案:

答案 0 :(得分:1)

  ostream&  operator<<(ostream& o, const randomNumberMagnfier& rhs );

randomNumberMagnfier拼写错误。

修改

澄清您遇到的第二个错误:

  

错误:'std :: ostream&amp; randomNumberMagnifier :: operator&lt;&lt;(std :: ostream&amp;,const randomNumberMagnifier&amp;)'必须只取一个参数

您需要将其实现为非成员函数。

我可以说,你不能将它作为班级成员实现的原因来自标准中的13.5.2.1:

  

13.5.2二元运算符

     

1二元运算符应由具有一个参数的非静态成员函数(9.3)或具有两个参数的非成员函数实现。因此,对于任何二元运算符@,x @ y可以解释为x.operator @(y)或operator @(x,y)。如果已声明了两种形式的运算符函数,则13.3.1.2中的规则确定使用哪种解释(如果有的话)。

也就是说,如果你正在重载一个二元运算符并且它是一个成员函数,那么它必须带一个参数。您需要两个参数,因此必须使用非成员函数。