Variablenzugriff zwischen Klassen
-
Schreib dir einen Copykonstruktor und/oder einen Zuweisungsoperator für die Klasse.
Dann kannst du sowas machen:
Klasse1 Neu(Alt);
-
daniel12345 schrieb:
aber ich weise ja die werte direkt in der ersten klasse zu (also ohne extra angelegte Instanz)
"In der Klasse" kannst du nichts zuweisen, denn Klassen enthalten keinen Code. Wahrscheinlich meinst du eine Memberfunktion. Wenn die Variable nicht gerade statisch ist, gibt es immer eine Instanz. Über die wird die Memberfunktion nämlich aufgerufen.
-
Du könntest z.B. einen Pointer auf die Klasse machen
CKlasse1* KL1; CString test = KL1->start;
-
@estartu_de: Ich befürchte das die beiden Klassen nix voneinander wissen. Ansonsten würde es gehen.
Es würde auch funktionieren, wenn du in Klasse2 einen Zeiger auf Klasse1 hättest
-
Horst2 schrieb:
@estartu_de: Ich befürchte das die beiden Klassen nix voneinander wissen. Ansonsten würde es gehen.
Ich hatte deswegen vermutet, dass die Lösung geht:
daniel12345 schrieb:
aber ich weise ja die werte direkt in der ersten klasse zu (also ohne extra angelegte Instanz), und lege danach eine neue instanz an.
ist es denn da irgendwie möglich, sämtliche werte zu übergeben?
-
naja, der zugriff funktioniert. die überlegung mit den pointer hatte ich schon probiert, nur entstand das problem,dass die variablen in dem fall einfach immer leer waren.
hab ich denn eine möglichkeit, zb die adresse der instanz rauszufinden, wenn ich direkt in den memberfunktionen arbeite?
-
Deinen letzten Post versteh ich nicht ganz. Was willst du rausfinden? Was ging genn am Pointer nicht? Wenn du nen Zeiger drauf machst sollte er die Variablen in der Klasse nicht löschen...
-
wenn ich den pointer in klasse 2 anlegen wollte, gab es so eine zugriffsverletzung:
// in Klasse2 Klasse1* handle;
und so waren die variablen alle leer:
Klasse1* handle = new Klasse1;
und andere möglicheiten kenn ich nicht.
-
Ist klar. Da beim new operator der Standardkonstruktor aufgerufen wird.
was pulse meinte ist etwa so:
Klasse1 first; Klasse1 *handle = &first; // Werte verändern, z.B. handle->nummer = 4711
-
daniel12345 schrieb:
und andere möglicheiten kenn ich nicht.
Du hast das grundsätzliche Problem immer noch nicht verstanden. Du kannst nicht aus einem Schrank herausholen, was du in einen anderen hineingelegt hast. Das Problem kannst du nicht lösen, indem du immer neue Schränke kaufst. Das ist aber bis jetzt deine Vorgehensweise.
Du brauchst eine Referenz oder einen Zeiger auf genau die Instanz, in der du die Werte abgelegt hast. Wie das konkret geht, hängt vom Aufbau deines Programms ab.
-
eine lösung für MFK's beschreibung ist das du 2 globale Zeigervariablen anlegst:
//global Klasse1 *pKlasse1; Klasse2 *pKlasse2;
sobald du dann irgendwo mal eine Instanz einer Klasse erstellst gibst du die Adresse dieser Instanz auch gleich der dazugehörigen Variable, das machst du genau einmal!
Klasse1 first; pKlasse1 = &first;
jetzt kannst du in der anderen Klasse über first auf die Werte zugreifen. Allerdings müssen, damit das funktioniert, die Obigen 2 Schritte schon ausgeführt worden sein.
//in Klasse2: VariableKlasse2 = first->VariableKlasse1;
das machst du analog in der Klasse 1 wenn du dort die Werte der Klasse 2 haben willst.
-> Allerdings hat das nicht viel mit MFC zu tun. Naja egal.Gruß Chris++
-
gut, vielen dank euch allen. werds dann mal so probieren