Probleme mit cout "<<" Operator



  • Guten Tag zusammen,

    ich habe ein Programm geschrieben, bei dem ich einen 3d-Vektor mit Werten fülle.
    Diese konnte ich bis gestern noch einfach mit

    cout << vector[x][y][z] << endl;
    

    ausgeben. Als ich mich heute wieder an das Programm gesetzt habe, gab es folgende Fehlermeldung:

    Fehler: no match for 'operator<<' (operand types are 'std::basic_ostream<char>' and '<unresolved overloaded function type>')
    cout << 5 << end;
    ^

    Wie ihr seht, habe ich zum Test einfach mal den Wert "5" mit

    cout << 5 << endl;
    

    auszugeben, aber auch hier wird dieser Fehler angezeigt...

    Ich weiß leider nicht woran das liegt, kann mir da vielleicht jemand helfen? Alle vorher geschriebenene Funktionen, die in diesem Fall gar nicht genutzt werden können problemlos kompiliert werden, daher verstehe ich nicht was los ist...

    Liebe Grüße



  • << end;
    

    end?



  • oh gott, ja ich meine natürlich "endl" 😃

    Der Fehler mit der Ausgabe der "5" ist nun weg .... 😉 aber einen Wert des 3d-Vektors kann ich immer noch nicht ausgeben. Spreche ich den Wert vielleicht falsch an?



  • käsebrot95 schrieb:

    kann ich immer noch nicht ausgeben

    Hab noch nie einen Compiler gesehen, der so eine Meldung ausgibt.



  • Copy-Paste der Codezeile (und vielleicht 1-2 Zeilen drum herum) sowie der Deklaration + Copy-Paste der exakten Fehlermeldung?

    Ich frage das deshalb nach, weil die Syntax erst einmal richtig aussieht.

    Heißt dein vector wirklich "vector"? Auch wenn es geht, würde ich das nicht empfehlen.

    Einfahces ausführbares Beispiel (sogar mit dem Namen "vector"):

    #include <vector>
    #include <iostream>
    using namespace std;
    
    int main() {
        vector<vector<vector<int>>> vector = {{{42}}};
        cout << vector[0][0][0] << '\n';
    }
    


  • Also mein Vektor heißt "hindernisse gesamt". Die Größe des Vektors kann variieren. Im Hauptprogramm gebe ich diesen Vektor wie folgt aus:

    for(auto h:hindernisse_gesamt){
           for(auto i:h){
               for(auto j:i){
                   cout << j << " ";
               }
               cout << endl;
           }
           cout << endl;
       }
    

    Dieser Weg funktioniert bisher auch problemlos. Wenn ich nun einen Wert mit

    cout << hindernisse_gesamt[0][1][0] << endl;
    

    ausgebe, funktioniert es plötzlich auch... Ich werd wahnsinnig. Oder gibt es bei dem gcc Compiler eine Mittagspause von 1230-1330? 😉

    Ok, also das Problem scheint gelöst zu sein.. Kann mir denn vielleicht trotzdem jemand sagen, wie man den Operator "<<" überladen kann, wenn man nichts mit objektorientierter Programmierung am Hut hat?



  • käsebrot95 schrieb:

    Kann mir denn vielleicht trotzdem jemand sagen, wie man den Operator "<<" überladen kann, wenn man nichts mit objektorientierter Programmierung am Hut hat?

    Ich habe keine Ahnung, was Hüte mit Operatoren zu tun haben sollen.



  • Wie wäre es denn mit sowas:

    template<typename T>
    ostream& operator<<(ostream &os, const vector<T> v) {
        os << '[';
        if (!v.empty()) {
            os << v.front();
            for (auto it = v.begin() + 1; it != v.end(); ++it) {
                os << ", " << *it;
            }
        }
        os << ']';
        return os;
    }
    

    Was das mit Objektorientierung zu tun haben soll, ist aber unklar.



  • es sollte natürlich const vector<T>& v heißen.



  • Das würde vorraussetzen, dass T den Operator "<<" implementiert hat.

    Sollte aber für Käsebrot95s Fall wohl ausreichen.


Log in to reply