Problem beim ableiten von templates

OP #1646180
Lesenswert?

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
Lesenswert?

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.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren