在我正在进行的一个项目中,我有一个Score
类,在下面定义score.h
。我试图重载它,因此,当<<
对其执行操作时,_points + " " + _name
会打印出来。
这是我试图做的:
ostream & Score::operator<< (ostream & os, Score right)
{
os << right.getPoints() << " " << right.scoreGetName();
return os;
}
以下是返回的错误:
score.h(30) : error C2804: binary 'operator <<' has too many parameters
(这个错误实际上出现了 4 次)
我设法通过将重载声明为友元函数来使其工作:
friend ostream & operator<< (ostream & os, Score right);
并Score::
从 score.cpp 中的函数声明中删除(实际上没有将其声明为成员)。
为什么这行得通,而前一段代码却行不通?
谢谢你的时间!
编辑
我删除了对头文件重载的所有提及...但是我收到以下(也是唯一的)错误。binary '<<' : no operator found which takes a right-hand operand of type 'Score' (or there is no acceptable conversion)
为什么我的测试在 main() 中找不到合适的重载?(这不是包含,我检查过)
下面是完整的分数.h
#ifndef SCORE_H_
#define SCORE_H_
#include <string>
#include <iostream>
#include <iostream>
using std::string;
using std::ostream;
class Score
{
public:
Score(string name);
Score();
virtual ~Score();
void addPoints(int n);
string scoreGetName() const;
int getPoints() const;
void scoreSetName(string name);
bool operator>(const Score right) const;
private:
string _name;
int _points;
};
#endif