Hallo erstmal an alle,
Ich habe da mal ein C++ problem mit dem GCC.
Ich erzeuge eine template Basisklasse TBase und leite davon eine weitere
template klasse ab. In der abgeleiteten Klasse kann ich weder auf die
Membervariablen, noch auf die Funktionen der Basisklasse zugreifen.
Siehe folgenden Quellcode:
template <int N> class TBase {
public:
int Array[N];
int fb1() { return Array[0]; };
}; // Bis hier ist alles OK
template <int NN> class TDerived : public TBase<NN> {
int UU;
public:
int fc2() { return Array[0]; }; // error: 'Array' was not
declared in this scope
int fc3() { return UU; }; // OK
int fc4() { return fb1(); }; // error: .... 'fb1' must be
available
}; // Hier ist von der Basisklasse
nichts mehr sichtbar, obwohl alle Member und Funktionen public sind
int main() {
TDerived<10> Derived;
Derived.Array[2] = 5; // OK
Derived.UU = 1; // correct error, because UU is private
Derived.fb1(); // OK
return 0;
}
Wenn ich nun ein Objekt von der abgeleiteten Klasse erzeuge, dann kann
ich auch wieder auf die Basisklassen Member zugreifen.
Der gleiche Code kompiliert unter Borland CBuilder, Microsoft visual
studio 6 und einem anderen embedded compiler von microtec.
Gibts da einen Kompilerschalter beim GCC der das aendert, ich hab nichts
gefunden.
vielen dank im vorraus.
Axel
Gast
#1646259
Axel B. schrieb: > In der abgeleiteten Klasse kann ich weder auf die Membervariablen, noch > auf die Funktionen der Basisklasse zugreifen. Doch, kannst du schon, aber nicht so, wie du es von nicht-templates gewöhnt bist. Du mußt den Scope explizit angeben. > int fc2() { return Array[0]; }; // error: 'Array' was not > declared in this scope Ändere das in: int fc2() { return this->Array[0]; }; > Der gleiche Code kompiliert unter Borland CBuilder, Microsoft visual > studio 6 und einem anderen embedded compiler von microtec. Er ist falsch und sollte eigentlich nicht akzeptiert werden. GCC verhält sich hier korrekt.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.