Operator overloading für vektoren C++

Gast #5872642
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
}
Gast #5872715
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren