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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.