mikrocontroller.net

Forum: Compiler & IDEs Problem beim ableiten von templates


Autor: Axel B. (axelb)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.