"Freund" -Funktionen und & lt; & lt; Überladen des Operators: Was ist der richtige Weg, um einen Operator für eine Klasse zu überlasten?

In einem Projekt an dem ich arbeite, ich habe eine Score Klasse, unten in score.h. Ich bin versucht zu überlasten es so, wenn ein << operation durchgeführt wird, _points + " " + _name gedruckt wird.

Hier ist, was ich versuchte zu tun:

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

Hier sind die Fehler zurückgegeben:

score.h(30) : error C2804: binary 'operator <<' has too many parameters

(Dieser Fehler erscheint 4-mal, eigentlich)

Habe ich es geschafft es zum laufen zu bringen, indem er die überlastung als friend-Funktion:

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

Und entfernen der Score:: von der Deklaration der Funktion in score.cpp (effektiv nicht deklarieren, es als Mitglied).

Warum funktioniert das, aber die erstere Stück code nicht?

Vielen Dank für Ihre Zeit!

BEARBEITEN

Löschte ich alle Erwähnungen der überlastung, die auf der header-Datei... aber ich bekomme die folgenden (und nur die) Fehler. binary '<<' : no operator found which takes a right-hand operand of type 'Score' (or there is no acceptable conversion)
Wie kommt mein test in der main(), kann nicht finden die passenden überlastung? (es ist nicht das zählen, das habe ich überprüft)

Unten ist die volle Punktzahl.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

InformationsquelleAutor der Frage Francisco P. | 2010-05-13

Schreibe einen Kommentar