Templatklasse im cpp File



  • Hallo

    Versuche gerade eine Template Klasse zu implementieren. Mein Problem ist, dass es nur funktioniert wenn ich die ganze Klasse im Header implementiere. Wenn ich die Definition im cpp mache erhalte ich einen Linkerfehler.

    Codeausschnitt:

    .h

    template<class T> class CSingleVar
    {
      CSingleVar();
      ~CSingleVar();
    
      void Read();
    }
    

    .cpp

    template<class T>
    CSingleVar<T>::CSingleVar()
    {
    }
    
    ...
    
    template<class T>
    void CSingleVar<T>::Read()
    {
      ...
    }
    

    Leider erhalte ich bei diesem Code einen Linkerfehler.

    Was habe ich falsch gemacht. Was muss man noch beachten wenn man eine Templateklasse im cpp implementieren möchte?



  • Templates kann man nur im Header imlementieren...
    Es sei denn Du verwendest spezialisierte Templates... das macht aber seltenst Sinn 😉



  • Wenns unbedingt sein muß kannst du auch die cpp im header inkludieren.



  • Ok. Was ich dann aber nicht verstehe warum man so viel Beispiele findet, die genau das zeigen was ich implementiert habe.



  • c++ user schrieb:

    Was ich dann aber nicht verstehe warum man so viel Beispiele findet, die genau das zeigen was ich implementiert habe.

    Zeig doch mal ein paar von den "vielen".



  • Hallo.
    Da habe ich wohl was falsch verstanden. Ich war der Meinung: Implementierung im Header = Inline Code. Das muss ja aber nicht sein. Bei dem Beispielcode können ja beide Teile im Header stehen.

    Ok verstanden. Bekomme aber trotzedem Fehler wenn ich den gesamten Code in den Header packe.

    Syntaxfehler: '<' beim Konstruktor und Destruktor

    Zeile 2 und 9 in meinem Besipielcode.



  • Fehlt das Semikolon am Ende der Klassendefinition?



  • Sorry fehlt nur hier im Forum.

    Habe die .cpp Datei im Header eingebunden. Zusätzlich muss man die .cpp Datei vom Buildvorgang ausschliessen oder komplett aus dem Projekt verbannen. Dann gehts. Kompiler versucht natürlich die .cpp zusätzlich zu kompilieren. So was muss man erst mal wissen. Das steht nirgends.


Anmelden zum Antworten