Forum: PC-Programmierung Operator overloading für vektoren C++


von Ada (Gast)


Lesenswert?

Ich versuche gerade den: << Operator, für Vektoren zu deklarieren und zu 
definieren, bekomme bei der Ausführung aber folgende Fehlermeldung:

error: no match for 'operator<<' (operand types are 'std::ostream {aka 
std::basic_ostream<char>}' and 'std::vector<Book>')




Auszug des Quellcodes:
1
// Library.h
2
3
class Library {
4
public:
5
    Library();
6
    void showBooks() {cout << mBook;}   // In dieser Zeile Fehlermeldung
7
    
8
private:
9
    vector<Book> mBook;
10
};
11
12
ostream& operator<<(ostream& os, const vector<Book>& b);

1
// Library.cpp
2
3
ostream& operator<<(ostream& os, const vector<Book>& b)
4
{
5
    for(auto& book : b)
6
        os << book;
7
    return os;
8
}

von Ada (Gast)


Lesenswert?

Wo liegt mein Fehler?

von g457 (Gast)


Lesenswert?

> Wo liegt mein Fehler?

- falsche Reihenfolge
- grund- und nutzlose, fehlerverursachende Implementierung im Headerfile

HTH

von Ada (Gast)


Lesenswert?

g457 schrieb:
> - falsche Reihenfolge
> - grund- und nutzlose, fehlerverursachende Implementierung im Headerfile

Gehts auch genauer bitte

von tictactoe (Gast)


Lesenswert?

Wäre
1
friend ostream& operator<<(ostream& os, const Library& b);
nicht viel logischer?

von Ada (Gast)


Lesenswert?

tictactoe schrieb:
> Wärefriend ostream& operator<<(ostream& os, const Library& b);
> nicht viel logischer?

Wenn ich so drüber nachdenke, ja du hast Recht.

von Sebi (Gast)


Lesenswert?

Ada schrieb:
> Gehts auch genauer bitte

Dein operator<< steht im Header nach der Definition deiner showBooks() 
Funktion. Pack die Deklaration deines Operators davor, dann kennt der 
Compiler den Operator auch.

von Ada (Gast)


Lesenswert?

Habe es jetzt anders gelöst (in Anlehnung an den Vorschlag von 
tictactoe), dann spielt die Reihenfolge auch keine Rolle mehr (danke für 
den Hinweis Sebi):

1
// Library.h
2
3
class Library {
4
public:
5
    Library();
6
    void showBooks() {return mBook;}   // In dieser Zeile Fehlermeldung
7
    
8
private:
9
    vector<Book> mBook;
10
};
11
12
ostream& operator<<(ostream& os, const Library& l)



1
// Library.cpp
2
3
ostream& operator<<(ostream& os, const Library& l)
4
{
5
    for( auto& book : l.showBooks() )  // l.showBooks() entspricht dem Vektor mBook
6
        os << book;                
7
    return os;
8
}



g457 schrieb:
> - falsche Reihenfolge
> - grund- und nutzlose, fehlerverursachende Implementierung im Headerfile
>
> HTH

Hört sich so an als sei mein Programmierstil nicht der beste, vielleicht 
kann mir jemand ne gute Referenz nennen damit ich mich da verbessern 
kann?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.