错误:
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;
}
答案 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中的规则确定使用哪种解释(如果有的话)。
也就是说,如果你正在重载一个二元运算符并且它是一个成员函数,那么它必须带一个参数。您需要两个参数,因此必须使用非成员函数。