Matthias Reitinger
ɐɯıǝɹ
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.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.
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: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****
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