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