Forum: Compiler & IDEs template Klassen & static initializers


von Kupfer Michi (Gast)


Lesenswert?

Ich schlag mich grade mit der template Klassen Unterst

von Kupfer Michi (Gast)


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?



von Rolf Magnus (Gast)


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;

von Kupfer Michi (Gast)


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

von Rolf Magnus (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.