www.mikrocontroller.net

Forum: Compiler & IDEs template Klassen & static initializers


Autor: Kupfer Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schlag mich grade mit der template Klassen Unterst

Autor: Kupfer Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(uups, da ist beim abschicken etwas verloren gegangen)



Ich schlag mich grade mit der template Klassen Unterstützung im GCC 
herum.

Bei folgendem stark vereinfachtem Beispiel:

  template<int nix> class ZZ
  {
   public:
  static int A;
  };

  ZZ<4711> g_ZZ;
  int ZZ<4711>::A=3;   //<----: error: too few template-parameter-lists

gibts beim initialisieren des static members obige Fehlermeldung.
Auch ein Verstecken der template Klasse hinter einem typedef hilft 
nicht:

  typedef ZZ<4712> TZZ;
  TZZ g_TZZ;
  int TZZ::A=4;    //<----: error: too few template-parameter-lists

Seltsam ist auch der Plural in der Fehlermeldung.

In VC++ (z.B.) kompiliert das ganze fehlerfrei, wie es auch sein soll.

Hat jemand eine Idee?

Natürlich kann man auch dieses Problem programiertechnisch umgehen, aber 
bei dem wenigen was ich bezüglich templates in GCC ausprobiert habe gabs 
überaschend viele Hakeleien.

Wie ist da eure Erfahrung?



Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In VC++ (z.B.) kompiliert das ganze fehlerfrei, wie es auch sein soll.

Eigentlich soll es nicht, weil die Syntax falsch ist.

> Hat jemand eine Idee?

template<>
int ZZ<4711>::A=3;

Autor: Kupfer Michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da schau her...

Ich benutze obige Schreibweise seit den Anfangstagen der Templaterei und 
mir ist nie Aufgefallen das dies nicht ganz Konform ist
(bei der Klassen Instanziierung: ZZ<4711> g_ZZ; erlaubt GCC es ja auch 
ohne template<> Vorsatz).

Danke

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Instaziierungen ist das schon erlaubt, aber bei Spezialisierungen 
nicht.

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.