Vector call-by-reference



  • Hallo,

    ich habe eine Klasse definiert, die mir Daten einließt, verarbeitet und in eine vector-Array speichert.

    Ich möchte jetzt eine Methode schreiben, die diesen Vektor per call-by-reference übergibt. Also nur die Adresse und nicht die Werte.

    wie muss ich eine solche Methode beschreiben?

    daten.h

    class Daten {
        private:
            vector<vector<double>> werte;
        public:
            void get_werte (vector<vector<double>> *werte); //????
    
    };
    

    daten.cpp

    void Daten::get_werte (vector<vector <double>> & Daten::werte){
    
    }
    

    main.cpp

    Wie wird die Methode aufgerufen????
    

    PS: Wie man sieht bin ich kein Informatiker bzw. habe programmieren gelernt. Aber manchmal muss man es halt selber machen 😃 Bin also für eine Lösung dankbar


  • Mod

    C-Tutorial gelesen? Du wirfst da Referenzen mit Pointern durcheinander. Und die Syntax von Klassen hast du auch noch nicht so richtig raus.

    void get_werte (vector<vector<double>> &werte); 
    
    ...
    
    void Daten::get_werte (vector<vector <double>> &werte){
    
    ...
    
    datenobjekt.get_werte(wertevector);
    

    Und erfahrungsgemäß der Standardtipp: Leute die vector<vector> benutzen, wollen fast nie vector<vector> sondern eine "rechteckige" Datenstruktur, wie z.B. vector<array> (falls die innere Dimension statisch ist) oder gerade gestern kam das Thema schon einmal:
    http://www.c-plusplus.net/forum/p2205025#2205025
    (falls die innere Dimension dynamisch ist). vector<vector> kann man sich eher als eine Liste von unterschiedlich langen Zeilen vorstellen.



  • Du übergiebst einen Zeiger, keine Referenz. Da müsstest du zuerst referenzieren:

    int a;
    int* b = &a;
    

    In C++ gibt es allerdings richtige Referenzen, die so aussehen:

    int a;
    int& b = a;
    

    Da musst du auch weiter nichts machen.



  • Hilft nichts, da muss man einfach (mit einem guten Buch) lernen. Ein Informatik-Studium scheint sicher nicht erforderlich! 🤡



  • Danke erstmal für die Hilfe, nur ... 🙄

    in der main.cpp rufe ich die Klasse so auf:

    Daten* daten;
    daten = new Daten [anz]; //dynam. Anzahl an Elementen
    

    Wenn ich dann aufrufe:

    daten[i].get_werte(werte);
    

    bekomme ich einen fehler.

    wenn ich

    vector<vector<double>> werte;
    daten[i].get_werte(werte);
    

    aufrufe, läuft das Programm. Es werden aber keine Werte übergeben.


  • Mod

    derbernd schrieb:

    Danke erstmal für die Hilfe, nur ... 🙄

    in der main.cpp rufe ich die Klasse so auf:

    Daten* daten;
    daten = new Daten [anz]; //dynam. Anzahl an Elementen
    

    Du kennst doch vector. Warum dann noch solcher Mist?

    Wenn ich dann aufrufe:

    daten[i].get_werte(werte);
    

    bekomme ich einen fehler.

    Welchen Fehler? Was ist hier werte ? Ist der Fehler zufällig, dass der Compiler die gleiche Frage stellen muss wie ich?

    wenn ich

    vector<vector<double>> werte;
    daten[i].get_werte(werte);
    

    aufrufe, läuft das Programm. Es werden aber keine Werte übergeben.

    Und wie stellst du das fest? Änderst du die Werte überhaupt? Wenn du Schwierigkeiten hast, bitte vollständige Minimalbeispiele (d.h. für uns ohne Änderung compilierbar (bis auf den eventuellen Fehler)!) , die das Problem verdeutlichen.



  • SeppJ schrieb:

    Daten* daten;
    daten = new Daten [anz]; //dynam. Anzahl an Elementen
    

    Du kennst doch vector. Warum dann noch solcher Mist?

    Wird angepasst.

    Wenn ich dann aufrufe:

    daten[i].get_werte(werte);
    

    bekomme ich einen fehler.

    Welchen Fehler? Was ist hier werte ? Ist der Fehler zufällig, dass der Compiler die gleiche Frage stellen muss wie ich?

    Der Compiler sagt: error C2065 'werte': nichtdeklarierter Bezeichner. werte mittels vector<> geht auch nicht (oder ich bekomme es nicht hin).

    wenn ich

    vector<vector<double>> werte;
    daten[i].get_werte(werte);
    

    aufrufe, läuft das Programm. Es werden aber keine Werte übergeben.

    Und wie stellst du das fest? Änderst du die Werte überhaupt?...[/quote]
    Ich gebe die Größe der einzelnen Vectoren in der main aus.



  • Wenn ich dann aufrufe:

    daten[i].get_werte(werte);
    

    bekomme ich einen fehler.

    Welchen Fehler? Was ist hier werte ? Ist der Fehler zufällig, dass der Compiler die gleiche Frage stellen muss wie ich?

    Der Compiler sagt: error C2065 'werte': nichtdeklarierter Bezeichner

    Ist ja logisch, wenn werte nicht definiert ist. Leider wird aus dem bisherigen Code nicht klar, woher werte kommen soll.

    wenn ich

    vector<vector<double>> werte;
    daten[i].get_werte(werte);
    

    aufrufe, läuft das Programm. Es werden aber keine Werte übergeben.

    Mit keine Werte meinst Du einen leeren vector? Ist ja auch logisch, Du definierst ja just eine Zeile zuvor einen leeren Vector.

    Ohne mehr Kontext wird das hier nix...


  • Mod

    Der Compiler sagt: error C2065 'werte': nichtdeklarierter Bezeichner. werte mittels vector<> geht auch nicht (oder ich bekomme es nicht hin).

    Meine Güte. Lies ein Grundlagenbuch! Du musst schon in der Lage sein, Funktionen aufzurufen und zu verstehen, wie das mit den Variablen geht. Siehe zweiter Link in meiner Signatur. Rumprobieren bis es läuft ist eine ganz ganz schlechte Programmiertechnik. Code ist Logik pur! Du musst ganz genau wissen, wo und warum du welches Zeichen setzt.

    Ich gebe die Größe der einzelnen Vectoren in der main aus.

    Verzeih mir, wenn ich einfach mal skeptisch bin, dass du alles richtig gemacht hast. Da du immer noch keinen konkreten Code zeigst, willst du aber wohl keine Hilfe haben.


Anmelden zum Antworten