Objekte werden zerstört

Hallo zusammen und noch mal vielen Dank für die Hilfe.
Der Fehler lag leider ganz wo anders. Ich hab es nicht wahrgenommen, weil ich nicht weiss, was es macht.
Und genau weil du als Anfänger nicht weißt, was du weglassen kannst und was nicht, solltest du immer ein vollständiges, kompilierbares Beispiel angeben.


Die NetBeans -IDE hat mir in der Header-Datei folgendes erzeugt:

[...]

Also einen Konstruktor mit einer constanten Referenz auf die Klasse "Liwanze".
Aber was hat das für einen Sinn und warum hat es den Code so beeinflusst, dass ich
keine erzeugten Objekte mehr hatte****
Das ist der Kopierkonstruktor für deine Klasse. Er wird immer dann aufgerufen, wenn du eine Kopie eines Objektes erzeugst. Das passiert beispielsweise, wenn du das Objekt per-value als Funktionsparameter übergibst (hier an push_back, wie bereits früher erklärt). In dieser Form ergibt der Kopierkonstruktor keinen Sinn, da er nämlich nichts kopiert. Richtig wäre:

C++:
Liwanze::Liwanze(const Liwanze& orig)
  : name(orig.name),
    loc(orig.loc) {
}

Oder aber auch die Deklaration und Definition des Kopierkonstruktors ganz weglassen, da in diesem Fall der Compiler automatisch einen zur Verfügung stellt.

Wenn du die Membervariablen im Konstruktor nicht selbst initialisierst, werden sie sofern möglich mit Defaultwerten versehen. Bei Klassen wie std::string heißt das, dass der Defaultkonstruktor aufgerufen wird (ergibt einen leeren String). Bei primitiven Datentypen wie deinem enum hingegegen wird standardmäßig überhaupt nichts initialisiert, der Inhalt der Membervariable loc ist also mehr oder weniger zufällig.

Deine Objekte waren also schon noch da, sie waren nur mit „unsinnigen“ Werten initialisiert, weil beim Kopieren in den Vektor die Membervariablen nicht kopiert wurden.

Grüße
Matthias
 
Hallo zusammen und vielen Dank für eure Hilfe.
Das Problem lag an einem Codefragment, welches mir die NetBeans IDE selbst erzeugt hat, sodass ich erst nicht daran gedacht habe und zwar das:
in der .h Datei

Code:
Liwanze(const Liwanze& orig);

in der .cpp Datei
Code:
Liwanze::Liwanze(const Liwanze& orig) {
}

Nach dem ich das auskommentiert habe, sind die Objekte auch in der main dar :)
 
Das Problem lag darin, dass mir die NetBeans IDE automatisch folgenden Code beim erstellen der .h Datei erstellt hat:

Code:
 //Liwanze(const Liwanze& orig);
und in der .cpp Datei ausplementiert hat:

Code:
//Liwanze::Liwanze(const Liwanze& orig) {
//}

Seit dem ich das weggemacht habe, verschwinden meine erstellten Objekte nun nicht mehr.
Vielen Dank noch mal
 

Neue Beiträge

Zurück