Zeigerarrays casten
-
Hallo allerseits,
Ich hab da ein Problem mit meinem C++ Code, ich hoffe ihr könnt mir weiterhelfen! Also, ich hab 2 Klassen A und B, die je ein Array x, bzw. y von Zeigern auf den Typ X, bzw. Y besitzen:class A { X** x; void f() {macht was mit x} } class B : public A { Y** y; }
Dabei ist A Basisklasse von B und X Basisklasse von Y.
Ausserdem enthalten A & B ne Fkt. f die was mit x macht.
Jetzt möchte ich eigentlich die Funktion f genauso auf das Zeigerarray y wie auf x anwenden können. Am einfachsten wäre es doch wenn ich x = y setzen würde und dann f() aufrufen würde, oder nicht? Weil X Basisklasse von Y ist, sollte das doch eigentlich gehen, hätte ich gedacht... aber mein Compiler weigert sich
Wenn ich stattdessen schreibe:for(alle i) { x[i] = y[i]; }
...und dann f aufrufe, klappt es. Aber dann muss ich alle Zeiger im Array umkopieren, was is nich so toll finde...
Kennt jemand einen Ausweg ?
mfg
Julius[ Dieser Beitrag wurde am 10.06.2003 um 22:41 Uhr von Julius80 editiert. ]
-
X = (X**)Y
-
ach mom das hätte natürlich einen bisschen anderen effekt als das was du geschrieben hast. Das würde heißen X = Y. Dann hätte das die Auswirkung wenn
du Y = NULL machst is X auch = NULL.
-
class A {
X** x;
template<class T>void f(T** _x) {macht was mit _x}
}class B : public A {
Y** y;
void f() { A::f( y); }
}
-
Komisch... müsste sich doch einfach casten lassen.
class B : public A { Y** y; void f() { A::f((X**)y); } };
Wieso soll das nicht gehn?
-
Oh, geht doch nicht!
In der Funktion würde es mit Casten Probleme beim Dereferenzieren geben, weil die Klassengröße ja nicht mehr stimmt.(Y** y;) X** auch_y = (X**)y; auch_y[10][15]; // <- bei [15] geht er dann 15*sizeof(X) weiter statt 15*sizeof(Y)
-
C14, auch mal wieder hier ???