Probleme bei Vektor ausgeben



  • Guten Tag

    Hab ein Problem und zwar möchte ich eine Vektor ausgeben, sprich den Inhalt der Objekte. Versuche es über Iteratoren jedoch kriege ich immer eine Fehlermeldung zum operator <<. Muss ich den zuerst überladen?

    std::vector <Account> m_Transactions;
    std::vector <Account>::iterator m_Iterator;

    std::ostream& operator<<(std::ostream& m_Transactions, Account& rhs);

    for (m_Iterator = m_Transactions.begin(); m_Iterator != m_Transactions.end(); m_Iterator++)
    cout << *m_Iterator << ", ";



  • std::vector <Account> m_Transactions;
    std::vector <Account>::iterator m_Iterator;
    
    std::ostream& operator<<(std::ostream& m_Transactions, Account& rhs);
    
    for (m_Iterator = m_Transactions.begin(); m_Iterator != m_Transactions.end(); m_Iterator++)
    cout << *m_Iterator << ", ";
    

    Die Benamsung lässt ahnen, dass Du etwas den Faden verloren hast. 🙂

    Anyway. Du hast einen vector mit Instanzen von Account , die Du ausgeben willst.
    Also musst Du - wie Du auch schon richtig angefangen hast definieren, wie ein Account -Objekt in einen Ausgabestrom eingefügt wird:

    std::ostream& operator<<(std::ostream& out, const Account& rhs){
      out << "Account:\n" << rhs.member1 << '\n' << rhs.member2;
      ...
      return out;
    }
    


  • Ja das ist gut möglich bin c++ am lernen momentan.

    Ich krieg bei deiner Zeile
    [code="cpp"]std::ostream& operator<<(std::ostream& out, const Account& rhs)

    einen Fehler das ein ; erwartet wird. Zudem hab ich eine frag rhs und ist ein objekt richtig? wiso muss ich um den operator zu überladen ein neues objekt erstellen?



  • LawC++ schrieb:

    Ich krieg bei deiner Zeile

    std::ostream& operator<<(std::ostream& out, const Account& rhs)
    

    einen Fehler das ein ; erwartet wird. Zudem hab ich eine frag rhs und ist ein objekt richtig? wiso muss ich um den operator zu überladen ein neues objekt erstellen?

    Wo der Fehler ist weiss ich nicht, Du zeigst ja nur einen kleinen Ausschnitt - hast Du denn das komplette Beispiel mit dem gesamten Teil in geschweiften Klammern {} übernommen?

    rhs ist kein Objekt - rhs ist ein const Account& .
    Eine Referenz.
    Genauer eine Referenz auf ein konstantes Account Objekt - d.h. über die Referenz kannst Du das referenzierte Objekt nicht verändern. Willst Du ja auch gar nicht - Du willst es ja nur ausgeben. Schau in Deinen Unterlagen nach, was es mit Referenzen auf sich hat.

    Da ein Bild bekanntlich mehr sagt als tausend Worte noch ein komplettes (fehlerfreiesTM) Beispiel:

    #include <iostream>
    #include <string>
    #include <vector>
    
    struct Account{
      std::string name, nummer;
    };
    
    std::ostream& operator<<(std::ostream& out, const Account& rhs){
      out << "Account:\n" << rhs.name << '\n' << rhs.nummer;
      return out;
    }
    
    int main(){
      Account accounts[] = {{"LawC++", "123"}, {"Furble Wurble", "4711"}};
      std::cout << accounts[0] << '\n'
                << accounts[1] << '\n';
    }
    

    Das ist übrigens nicht meine richtige Kontonummer... 😉



  • Vielen Dank habs gepackt 🙂


Anmelden zum Antworten