Array von Datentypen
-
Hallo,
wenn ich folgendes schreibe:
Person p("Hans", "Nachname"); Kinder k1("Elke"); Kinder k2("Eva"); p.attachKinder(&k1); p.attachKinder(&k2);wie muss ich dann in der Klasse Person die Methode attachKinder machen:
Ich habs mal so probiert, es hat mir aber eine Fehler ausgegeben:private: Kinder * kinder[10]; int i; ... void Person::attachKinder(Kinder* kinder) { kinder[i] = kinder; i++; } Was mache ich da falsch bzw. mein Problem ist, wie ich die Kinder in der Methode Person::attachKinder(Kinder * kinder) speichere; Kann mir da jemand helfen? vielen Dank für Eure Hilfe, lg
-
1. "es hat mir aber eine Fehler ausgegeben" - so? Das ist aber interessant. Noch interessanter wäre zu wissen, welchen Fehler es ausgibt.
2. Du hast einen Member und einen Parameter namens kinder. Benenne eins davon um.
-
Oder schreib this->kinder[i] = kinder; Unschön aber geht auch.
Ist i initialisiert?
-
wollte eh this schreiben (ist mir geläufiger, da ich normal java programmiere)
wie muss ich i initialisieren? Ist der Ansatz grundsätzlich OK oder könnt ihr da auf den ersten Blick einen Fehler sehen,
Ich kann leider die Fehlermeldung nicht angeben, da ich momentan das Programm nicht da habe,lg und vielen Dank für die Hilfe,
-
Da du beim Anlegen des Objekts noch keine Kinder hast, vermutlich mit 0

(btw, ich würde statt des Arrays einen std::vector<> verwenden)
-
Ja mit 0 ist schon klar aber wie schaut da die syntax aus (Person::i = 0;???)
wie könnte ich das dann mit einem vector machen?? was muss ich da hinschreiben, damit ich die Kinder der Person zuweise?Vielen Dank,
lg
-
a) Dazu brauchst du einen eigenen Konstruktor:
class Person { Person* kinder[10]; int i; public: Person() : i(0) {} ... };b) Du verwendest statt der beiden obigen Variablen einen vector - und kannst dann dessen Methoden nutzen:
class Person { std::vector<Person*> kinder; public: void AttachKind(Person* kind)//der ursprüngliche Name war irreführend - schließlich fügt die Methode nur EIN Kind ein { kinder.push_back(kind); } int ZaehleKinder() { return kinder.size(); } ... };
-
PollerCPP schrieb:
Ja mit 0 ist schon klar aber wie schaut da die syntax aus (Person::i = 0;???)
Zunächst mal: Wie weist Du denn einem der Kinder etwas zu? Mit kinder[n] = ... - wieso sollte es bei i anders sein. Du solltest es nur im Konstruktor machen.
Allerdings gibts in C++ für Initialisierungen die sog. Initialisierungsliste im Konstruktor, die meist vorzuziehen ist. Für Typen wie int kann man sie aber vernachlässigen.
// Einfache Zuweisung Person::Person() { i = 0; } // Initialisierungsliste Person::Person() : i(0) { }
-
Vielen Dank für die Hilfe,
lg