Hallo,
ich habe in der Vorlesung eine Aufgabe bekommen, es handelt sich um Bankkonten. Es gibt mehrere Arten von Bankkonten, einmal die normalen und die gebührenpflichtigen Konten. Eine Teilaufgabe war es jetzt, dass die Funktionen deposit() und withdraw() für jeden Typ Konto verwendet werden können.
Ich habe jetzt die Funktion deposit (withdraw() ) ist verhält sich eigentlich ähnlich, deshalb poste ich nur eine Funktion:
|
C-/C++-Quelltext
|
1
2
3
4
|
void deposit_ChargedAccount (struct ChargedAccount* a, long amount) {
deposit(a, amount);
a->count++;
}
|
|
C-/C++-Quelltext
|
1
2
3
|
void deposit (struct Account* b, long amount) {
b->balance += amount;
}
|
Wie man sieht, sind die Datentypen natürlich inkompatibel. Wenn ich den Funktionsaufruf jetzt umgestalte, mit einem Typecast, dann funktioniert das nicht wirklich.
|
C-/C++-Quelltext
|
1
2
3
4
|
void deposit_ChargedAccount (struct ChargedAccount* a, long amount) {
deposit((struct Account *)a, amount);
a->count++;
}
|
Das funktioniert allerdings nicht wirklich, der Professor meinte auch, man könne beides in void-pointer umwandeln, wäre zwar unelegant, aber es würde dann funktionieren, aber auch das funktioniert nicht so ganz.
Wenn ihr den gesamten Code benötigt, dann müsst ihr euch melden.
Ganz oben steht noch ein
|
C-/C++-Quelltext
|
1
|
typedef struct Account* Account;
|
Wenn ich im Typecast also nur (Account*) a mache, klappt es auch nicht, ich stehe da gerade auf dem Schlauch.
MfG Sascha