Получение компилятором восприятия << как определено для определенного класса - PullRequest
1 голос
/ 13 мая 2010

Я отредактировал свое сообщение с этим вопросом, но не получил ответов.

Я перегружен << для класса, <code>Score (определено в Score.h), в Score.cpp.

ostream& operator<< (ostream & os, const Score & right)
{
 os << right.getPoints() << " " << right.scoreGetName();
 return os;
}

(getPoints извлекает атрибут int, getName a string один)

Я получаю эту ошибку компиляции для теста в main (), содержащегося в main.cpp

binary '<<' : no operator found which takes a right-hand operand of type 'Score' (or there is no acceptable conversion)

Почему компилятор не «распознает» эту перегрузку как допустимую? (включает в себя)

Спасибо за ваше время.

EDIT:

По запросу код, вызывающий ошибку:

cout << ":::::\n" << jogador.getScore() << endl;

jogador - это объект Player, который содержит Score объект. getScore возвращает этот атрибут.

Ответы [ 2 ]

4 голосов
/ 13 мая 2010

Возможно, вы не объявили свой operator<< в score.h? Обычно он должен содержать что-то вроде:

ostream& operator<< (ostream & os, const Score & right);

Редактировать: точнее, должно быть:

std::ostream &operator<<(std::ostream &os, const Score &right);

Вы определенно должны не иметь using namespace std; в заголовке, поэтому вам нужно std::, чтобы он работал правильно.

2 голосов
/ 13 мая 2010

Попробуйте объявить operator<< как друга в своем классе:

struct Score
{
  friend ostream& operator<<(ostream& output, const Score& right);
};

Это позволит вашей структуре Score хорошо вписаться в операторы печати:

Score my_score;
cout << my_score << endl;

В случае сомнений проверьте C ++ FAQ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...