C++ Klasse: nach Konstruktor alle Daten weg.



  • bei untenstehendem code verliert die klasse nach dem verlassen des konstruktors ihre (member) daten:

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Glossar{
    private:
    	string m_sWort;
    	string m_sBeschreibung;
    	Glossar *p_erster, *p_naechster;
    
    	//Platz für die Verweisdatenstruktur
    
    public:
    	Glossar();
    	Glossar(const string& wort, const string& beschreibung);
    
    	virtual ~Glossar();
    
    	setNeuerEintrag();
    	displayEintrag(const Glossar& gl);
    };
    
    Glossar::~Glossar()
    {}
    
    Glossar::Glossar(const string& wort, const string& beschreibung)
    {
    	Glossar *temp = new Glossar;
    	temp->m_sWort = wort;
    	temp->m_sBeschreibung = beschreibung;
    	temp->p_erster = temp;
    	temp->p_naechster = NULL;
    }
    
    Glossar::Glossar()
    {
    	Glossar *temp = new Glossar;
    }
    
    Glossar::displayEintrag(const Glossar& gl)
    {
    	cout << gl.m_sWort << endl;
    	cout << gl.m_sBeschreibung << endl;
    	cout << "=================" << endl;
    }
    
    int main()
    {
    	Glossar einWoerterbuch("Test", "Test");
    
    	einWoerterbuch.displayEintrag(einWoerterbuch);
    	return 0;
    }
    

    was mache ich denn da falsch? ich komme nicht druff.
    einWoerterbuch muss doch jetzt einen eintrag mit test, test enthalten? laut debugger ist einWoerterbuch aber leer. Im Konstruktor waren die Daten noch drinnen!

    grüsse
    wuschelz



  • Hallo

    da hast du was falsch verstanden. Im Konstruktor must du nicht eine neue Instanz erzeugen, sondern das ist dann bereits geschehen

    Glossar::Glossar(const string& wort, const string& beschreibung)
    {
     m_sWort = wort;
     m_sBeschreibung = beschreibung;
     p_erster = NULL;
     p_naechster = NULL;
    }
    

    /Edit : und auch die Ausgabefunktion ist falsch

    Glossar::displayEintrag()
    {
        cout << m_sWort << endl;
        cout << m_sBeschreibung << endl;
        cout << "=================" << endl;
    }
    

    bis bald
    akari



  • danke akari!

    also ist ein konstruktor schon ein implizites new??

    grüsse
    wuschelz



  • wuschelz schrieb:

    also ist ein konstruktor schon ein implizites new??

    nein, der Konstruktor wird durch new bzw. in ähnlichen Situationen aufgerufen.

    bis bald
    akari


Anmelden zum Antworten