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
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.