0

错误:

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;
}
4

1 回答 1

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

randomNumberMagnfier拼写错误。

编辑

为了澄清你得到的第二个错误:

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

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

据我所知,您无法将其作为班级成员实施的原因来自标准中的 13.5.2.1:

13.5.2二元运算符

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

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

于 2012-11-05T07:56:16.837 回答