Fehler bei Funktionsaufruf durch andere Instanz

MetallDragon

Erfahrenes Mitglied
hi Leute,
Ich habe bei meinem Prog einen sehr komischen Fehler entdeckt.
Hier mal eine schematische Ausführung, da ihr sicher keinen Bock auf den ganzen Code habt ;)
Code:
class a
{
int wert;
void aendere_wert(int neuerwert);
b]void aendere_wert2(int neuerwert2, a Ziel);

void a()
{
wert = 5;
}
};

void a::aendere_wert(int neuerwert)
{
   a = neuerwert;
}
void a::aendere_wert2(int neuerwert2, a Ziel)
{
Ziel.aendere_wert(neuerwert2)
}



Das ist die Klassendeklaration. Soweit Alles schön und gut aber jetzt:



void main()
{
a test;
a test2;

test.aenderewert(10);   das geht problemlos (steht nur der vollsändigkeit habler hier)  
test2.aenderewert2(20, test); <-- PROBLEM! Der Code wird ausgeführt aber nachdem die Funktion ausgeführt wurde wird der wert wieder auf den Ursprungswert gesetzt! 

}


So zur Erläuterung:
Es wird eine Klasse mit zwei funktionen definiert:
Eine, die den "wert" ändert und eine, die selbige aufruft.
Problem:
Wenn die die funktion aenderewert durch test aufrufe geht alles.
Wenn ich jedoch die Funktion aenderewert2
(deren aufgabe es ist bei test (nicht test2)! die funktion aenderewert aufzurufe geht es nicht. die Funktion wird zwar ausgeführt aber danach wir die variable test.wert wieder auf den Ursprungswert gesetzt.
Quasi als würde der Konstruktor nochmal ausgeführt.

Ich hoffe ihr versteht, was ich meine ;)
Bin für jede Hilfe dankbar.
 
PHP:
void aendere_wert2(int neuerwert2, a& Ziel);

void a::aendere_wert2(int neuerwert2, a& Ziel)
{
   Ziel.aendere_wert(neuerwert2)
}
...
test2.aenderewert2(20, test);

So sollte das gehen! In jedem C++ Buch kannst Du die Geschichte über den Referenz-Operator (das Kaufmännische UND nach dem Klassennamen) nachlesen!
 
Der Funktion wurde eine Kopie deines Objektes übergeben
a Ziel, dieses Objekt liegt auf dem Stack (was schonmal schlecht ist), sobald du die Funktion verlässt wird dieser Teil des Stacks ungültig un dein Objekt gelöscht
Wenn du ein guten Debugger hast, beobachte mal die Innerein von test du wirst sehen, dass sich diese nie ändern (zum Beispiel kannst du das machen, indem du dir die Adresse der Membervariable merkst un den Inhalt beobachtest)
 
Zurück