Vector Daten gehen immer verloren



  • Tach liebe Gemeinde!

    Folgendes Problem:

    Habe eine Klasse (unterklasse) welche von einer Basisklasse (basis) erbt und zwar protected.
    Nun füge ich in der Unterklasse Variablen hinzu, sodass ich dann insgesammt die Variablen meiner Unterklasse und die der Basisklasse zur Verfügung habe.
    Diese Daten möchte ich dann in einen Vektor schreiben, was auch funktioniert.
    Beim compilieren sind die Daten im Vektor. Sobald ich aber beim Compilieren wieder in meine main() Funktion zurückspringe ist der Vektor wieder leer

    Sieht dann ca. so aus:

    \\basis.h
    class basis
    {
    protected:
    	string test;
    	string test1;
    
    public:
    basis(string test, string test1){}
    .
    .
    .
    \\konstruktoren, funktionen usw....
    }
    
    \\unterklasse.h
    class unterklasse : public basis
    {
    private:
    	vector<unterklasse>vectname;
    	string test2;
    
    public:
    unterklasse(string test2, string test, string test1):basis(test, test1),test2(test2){}
    void fügeeininvector(\\variablen\\)
    .
    .
    .
    \\konstruktoren, funktionen usw....
    
    \\unterklasse.cpp
    void unterklasse::fügeeininvector(//variablen//)
    {
    string test3;
    unterklasse temp(test3, test1, test2);
    vectname.push_back(temp);
    }
    

    Wie gesagt. Sobald ich von der Zeile "vectname.push_back(temp);" wieder in main springe, ist der Vektor wieder leer.

    hoffe mir kann jemand weiterhelfen.
    besten dank und mfg



  • 1. wären c++ tags hilfreich.
    2. erbst du öffentlich
    3. sind beim kompilieren mit sicherheit keine Daten in irgendeinem vector.
    4. wäre der code interessant von dem du sprichst. Nicht irgendwelche Fetzen. Ich seh gar keine main Funktion.



  • tommy0815 schrieb:

    Wie gesagt. Sobald ich von der Zeile "vectname.push_back(temp);" wieder in main springe, ist der Vektor wieder leer.

    Zeig ein kompilierbares Minimalbeispiel, das den Fehler reproduziert.



  • Hallo,
    danke für deine Antwort. Anbei der Code etwas mehr ausgeführt.

    #include <string>
    #include <conio.h>
    #include <vector>
    
    using namespace std;
    
    //basis.h
    class basis
    {
    protected:
        string test;
        string test1;
    
    public:
    	basis(){}
    	basis(string test, string test1)
    	{
    		this->test=test;
    		this->test1=test1;
    	}
    };
    
    //unterklasse.h
    class unterklasse : public basis
    {
    private:
        vector<unterklasse>vectname;
        string test2;
    
    public:
    	unterklasse(){}
    	unterklasse(string test2, string test, string test1):basis(test, test1),test2(test2)
    	{
    		test2="lala";
    		this->test2=test2;
    	}
    
    	void fügeeininvector(string test, string test1);
    };
    
    //unterklasse.cpp
    void unterklasse::fügeeininvector(string test, string test1)
    {
    	string test3;
    	unterklasse temp(test3, test, test1);
    	vectname.push_back(temp);
    }
    
    void main()
    {
    	string test="halli";
    	string test1="hallo";
    
    	unterklasse unterklasse;
    	unterklasse.fügeeininvector(test, test1);
    	_getch();
    
    }
    

    Beim kompilieren ist nichts im Vektor das stimmt natürlich. Ich meine sobald ich nach der Zeile

    vectname.push_back(temp);
    

    mich befinde, steht etwas im Vektor. Danach springe ich aber in die main zurück und zwar eine Zeile unter

    unterklasse.fügeeininvect(test1, test2);
    

    Ab dann ist der Vektor wieder leer.

    Wenn ich beim vererben protected benutze ändere ich auch nichts daran.
    Ich frag mich nur was das sein kann. Wenn ich mich in der unterklasse.cpp befinde steht was im vektor und bleibt auch im vektor. Sobald ich in die main komme ist der Vektor wieder leer. 😕

    Kann sein das der Code hier nicht ganz syntaktisch richtig ist. Er soll nur zur veranschaulichung dienen.

    mfg



  • Woher weißt du. dass der Vector leer ist?



  • In den Vektor wird nur eine Kopie von 'temp' geschrieben. Da wir nicht wissen wie die Struktur eigentlich aussieht, gehe ich mal davon aus das du damit Probleme hast. Sieht insgesamt sowieso etwas merkwürdig aus. Mag an dem vereinfachten Beispiel liegen.



  • Das der Vektor leer ist bzw. das was drinn steht sehe ich daran das ich das Programm debugge und dann Schritt für Schritt "durchhüpfe".
    Dabei beobachte ich dann meinen Vektor im Überwachungsfenster.

    Hab zuvor ein Programm geschrieben (eigentlich die urspürungliche Version von diesem hier), welches ohne Vererbung arbeitet also auch ohne die

    //unterklasse.cpp und unterklasse.h
    

    Bei diesem Funktioniert das mit dem Kopieren in den Vektor. Die Daten bleiben auch im Vektor erhalten wenn ich wieder in der main() bin.



  • Wenn ich das hier
    http://www.c-plusplus.net/forum/p1982170#1982170
    kompiliere und ausfülle, ist der vector nicht leer.
    Wahrscheinlich ist der Code nicht das was du ausführst?



  • tommy0815 schrieb:

    Das der Vektor leer ist bzw. das was drinn steht sehe ich daran das ich das Programm debugge und dann Schritt für Schritt "durchhüpfe".
    Dabei beobachte ich dann meinen Vektor im Überwachungsfenster.

    Das könnte auch ein Debuggerproblem sein. Ich würde mal die size-Funktion des Vectors im Programm aufrufen und dann sehen, was raus kommt.



  • Am Debugger is es nicht gelegen.

    Irgend etwas war in der Programmabfolge nicht richtig. Hab das ganze ein wenig umstrukturiert. Die Übergabe der Variablenwerte erfolgte zuvor über eine andere klasse, die zur verwaltung der unterklassen diente.
    Diese hab ich jetzt entfernt und die Eingabe von Daten erfolgt jetzt direkt in denn Unterklassen.

    Funktioniert bisweilen ohne Fehler. 👍 Vielleicht finde ich noch raus was den urspünglichen Fehler verursacht hat.

    mfg



  • problem gelöst... 🙂
    beim kunstruktor hat was nicht gepasst. 💡

    habs hin bekommen - trotzdem danke!

    mfg


Anmelden zum Antworten