В проекте, над которым я работаю, у меня есть класс 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