static variablen in template-klasse



  • hallo,

    ich möchte eine static-variable für jede template klasse definieren, allerdings mag der compiler das nicht:

    template <typename T> class Foo
    { 
      Foo();
      static int bar;
    };
    
    template <typename T> 
    int Foo<T>::bar = 0;
    
    template <typename T>
    Foo<T>::Foo(){}
    

    Compiler meint: Syntaxerror before '::' token.

    Weiß jemand rat?



  • Hallo,

    Templates darf man nicht in *.hpp und *.cpp Dateien aufsplitten, das können die (meisten) Compiler nicht. Du musst alles direkt in die *.hpp Datei schreiben, Deklarationen und Definitionen.

    MfG

    GPC



  • ja stimmt, ist in meinem programm auch nicht so. hab ich nur beim übertragen vergessen...
    hab es mal aus dem beitrag rausgenommen.



  • Semikolon am Ende der Klassendefinition?



  • Auch daran leigt es nicht (hab auch das im Beispiel verbessert, das nächste mal sollt ich mal besser aufpassen beim code-abtippen)

    MFK schrieb:

    Semikolon am Ende der Klassendefinition?

    Ich denke, es liegt daran, dass der Compiler einem nicht ausgeprägten Typ eines Templates keine static-Werte zuweisen kann.



  • Kompiliert bei mir einwandfrei (dein snippet von oben), musste nur den Standard-Ctor public machen damit ich Instanzen von Foo erstellen kann.

    Der Fehler wird folglich von etwas anderem produziert.



  • Hallo miteinander,

    Ich nehme alles zurück und entschuldige mich.
    ich hatte im Code einen Tippfehler 😞



  • Templates darf man nicht in *.hpp und *.cpp Dateien aufsplitten, das können die (meisten) Compiler nicht. Du musst alles direkt in die *.hpp Datei schreiben, Deklarationen und Definitionen.

    Bist du sicher?

    //interface.hpp:
    template<class T>
    void f(T t); //Deklaration
    
    //interface.cpp:
    export template<class T>
    void f(T t)  //Definition
    {
    /*...*/
    }
    


  • hehe, ja. Jedenfalls mit Einschränkung (

    GPC schrieb:

    das können die (meisten) Compiler nicht.

    ), die meisten Compiler, darunter die GCC, VC++, IBM, DigitalMars usw. können export (noch?) nicht (siehe auch den Template-Artikel dazu, Abschnitt 7).
    Der Comeau kann export. Ich habe aber noch keinen gesehen, der den Comeau sein Eigen nennt und das wirklich mal ausführlich testen könnte.

    @mensch0815
    Mir ist aufgefallen, dass wir dir mehrer mögliche Fehlerquellen genannt haben und du mehrmals mit den Worten "Nur n Übertragsungsfehler" geantwortet hast. Wenn du das nächste mal postest, bitte denke daran, den GLEICHEN Code wie bei dir zu posten.

    EDIT: RS-Fehler

    MfG

    GPC


Anmelden zum Antworten