ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
342
342
EMPFEHLEN
-
10.12.03 19:54 #1
- Registriert seit
- Apr 2002
- Ort
- Giessen (Hessen)
- Beiträge
- 547
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
class a
{
int wert;
void aendere_wert(int neuerwert);
b]void[/b] 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); [/i]<-- PROBLEM! Der Code wird ausgeführt aber nachdem die Funktion ausgeführt wurde wird der wert wieder auf den Ursprungswert gesetzt!
}
[/I]
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.'Ich wäre gerne intelligent. Das würde bestimmt vieles einfacher machen.[...]'
Hap Thompson, R.E.M
-
11.12.03 10:53 #2
- Registriert seit
- Aug 2001
- Beiträge
- 1.411
So sollte das gehen! In jedem C++ Buch kannst Du die Geschichte über den Referenz-Operator (das Kaufmännische UND nach dem Klassennamen) nachlesen!PHP-Code:void aendere_wert2(int neuerwert2, a& Ziel);
void a::aendere_wert2(int neuerwert2, a& Ziel)
{
Ziel.aendere_wert(neuerwert2)
}
...
test2.aenderewert2(20, test);
-
11.12.03 16:28 #3
- Registriert seit
- Apr 2002
- Ort
- Giessen (Hessen)
- Beiträge
- 547
jo genau. Jetzt gehts. Trotzdem verstehe ich nicht, warum der Wert wieder auf den Ursprungswert zurückgesetzt wurde. Naja .
'Ich wäre gerne intelligent. Das würde bestimmt vieles einfacher machen.[...]'
Hap Thompson, R.E.M
-
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)
Ähnliche Themen
-
Buchstaben durch andere ersetzen
Von PH234X im Forum .NET Windows FormsAntworten: 2Letzter Beitrag: 09.01.09, 16:43 -
Null-Referenz-Fehler bei Funktionsaufruf
Von TommesDee im Forum Flash PlattformAntworten: 3Letzter Beitrag: 13.03.08, 12:39 -
Klassenvariable kann nur durch neue Instanz angesprochen werden
Von C3000 im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 15.06.07, 14:10 -
Fehler: error LNK2001 public: virtual __thiscall - bei bilden einer Instanz
Von nammder im Forum VisualStudio & MFCAntworten: 12Letzter Beitrag: 04.11.05, 11:00 -
Materialglühen glüht durch andere andere Objekte durch :(
Von BeBiBu im Forum Cinema 4DAntworten: 8Letzter Beitrag: 13.04.04, 19:50





Zitieren
Login






