dynamische Klassenarrays
-
vector<CMensch> Menschen; for(int i=0;i<anzahl;++i) Menschen.push_back(CMensch(n,g,a));PS: Bist du sicher, daß du mit genau dem Zeiger gearbeitet hast, hinter dem du dein Array versteckt hast? Zeig doch mal den Code im größeren Zusammenhang - inklusive der Versuche, die Objekte wieder auszulesen.
-
klanc schrieb:
@Badestrand: hab es auch schon über entsprechende Funktionen: set_alter, set_name und set_groesse versucht, aber da tritt dasselbe Problem auf.
CMensch* PointerMensch; PointerMensch = new CMensch[anzahl]; for(int i=0;i<anzahl; i++){ PointerMensch[i].set_alter( Alter ); PointerMensch[i].set_name( Name ); PointerMensch[i].set_groesse( Größe ); } void CMensch::set_alter( int Alter ) { age_person = Alter; }Das funktioniert nicht? Dann stimmt irgendwas aber gewaltig nicht! Und ja, die Objekte sollten eigentlich nix vergessen

Die Werte im Konstruktor zu übergeben ist aber sowieso eleganter/besser. Nichtsdestotrotz scheint da irgendwas ja nicht ganz so zu funktionieren...
-
Name sollte auch kein char sondern ein std::string sein es sei denn alle deine Namen haben nur einen Buchstaben.

-
Anfangs hab ich zwei Objekte der Klasse CMensch angelegt.
//Header CMensch* pMensch1; CMensch* pMensch2;//CPP pMensch1 = new CMensch(Wili, 180, 25); pMensch2 = new CMensch(Anne, 170, 22); pMensch1->SetzeGewicht(); ...Damit hat das auch gut funktioniert. Die Initialisierung der Variablen im Konstruktor und der Zugriff darauf innerhalb der SetzeGewichts-Funktion. Aber mit dem Klassenarray funzt das nicht so, weiß auch nicht wieso.
Ausgelesen hab ich die Variablen im Debug-Modus. Da waren die Variablen nicht belegt.
-
Braunstein schrieb:
Name sollte auch kein char sondern ein std::string sein es sei denn alle deine Namen haben nur einen Buchstaben.

Hab ich wieder falsch angegeben, sind in Wirklichkeit auch Vom Typ string. Sorry
-
Zeig doch mal deine Klassendeklaration.
-
klanc schrieb:
Anfangs hab ich zwei Objekte der Klasse CMensch angelegt....
Mag sein ... aber warum ?

Geht doch viel einfacher (sicherer, stabiler, ...) mit
//CPP CMensch Mensch1("Wili", 180, 25); CMensch Mensch2("Anne", 170, 22); Mensch1.SetzeGewicht(5); ......
und wenn man einen Container mit denen haben will, ist der vector-Vorschlag von CStoll immer noch der bessere:CStoll schrieb:
vector<CMensch> Menschen; for(int i=0;i<anzahl;++i) Menschen.push_back(CMensch(n,g,a));Gruß,
Simon2.
-
Braunstein schrieb:
Zeig doch mal deine Klassendeklaration.
class CMensch { public: CMensch(void); CMensch(string Name, int Groesse, int Alter); public: ~CMensch(void); private: int age_person, height_person, name_person; public: void SetzeGewicht(); }Dies ist die Deklaration der Klasse CMensch.
-
klanc schrieb:
Braunstein schrieb:
Zeig doch mal deine Klassendeklaration.
class CMensch { public: CMensch(void); CMensch(string Name, int Groesse, int Alter); public: ~CMensch(void); private: int age_person, height_person, name_person; public: void SetzeGewicht(); }Dies ist die Deklaration der Klasse CMensch.
Wofür brauchst Du denn den Destruktor ?
Ach ja: Und möchtest Du Gewicht auch auf irgendetwas setzen ? Der Funktion täte ein Parameter vielleicht ganz gut.Gruß,
Simon2.
P.S.: Die mehreren public's da drin lassen die Java-Herkunft noch ein wenig wahrscheinlicher wirken ... (zusammen mit den überflüssigen news).

-
Du brauchst in C++ recht selten new, anders als in Java. Alles mit new erzeugte muss Du auch wieder mit delete freigeben. Arbeitest Du hingegen ohne new, so wird der Speicher auf dem heap selbstständig angelegt und auch wieder gelöscht. Lässt sich zwar nicht immer umgehen, aber ich habe new so gut wie noch nie gebracht.
-
Wie schon gesagt sollte name_person ein string sein. Sonst macht die ganze Klasse keinen Sinn.
-
Danke euch allen. Habs den fehler gefunden, der lag woanders....
-
klanc schrieb:
Danke euch allen. Habs den fehler gefunden, der lag woanders....
Dann zeig doch mal das Ergebnis (interessiert mich ja jetzt doch) .. und am Besten noch, wo der Fehler lag (man lernt nie aus).
Gruß,
Simon2.