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スペルが間違っています。

編集

発生している2番目のエラーを明確にするには:

エラー:'std :: ostream&randomNumberMagnifier :: operator <<(std :: ostream&、const randomNumberMagnifier&)'は引数を1つだけ取る必要があります

これを非メンバー関数として実装する必要があります。

私が知る限り、クラスのメンバーとして実装できない理由は、標準の13.5.2.1に由来します。

13.5.2二項演算子

1二項演算子は、1つのパラメーターを持つ非静的メンバー関数(9.3)または2つのパラメーターを持つ非メンバー関数のいずれかによって実装されるものとします。したがって、任意の二項演算子@の場合、x @yはx.operator@(y)またはoperator @(x、y)のいずれかとして解釈できます。演算子関数の両方の形式が宣言されている場合、13.3.1.2のルールは、どちらが使用されるかを決定します。

つまり、二項演算子をオーバーロードしていて、それがメンバー関数である場合は、1つのパラメーターを受け取る必要があります。2つのパラメーターが必要なため、非メンバー関数を使用する必要があります。

于 2012-11-05T07:56:16.837 に答える