Von Template-Klasse erben



  • Hallo zusammen,

    ich stehe vor folgendem Problem:
    Ich habe eine Template-Klasse geschrieben und möchte nun eine erbende Klasse erstellen, die jedoch KEINE Template-Klasse sein soll.

    Ein kleines Beispiel

    Template-Klasse:

    // basicitem.h
    
    template <class T>
    class BasicItem
    {
    public:
        BasicItem();
    
    };
    
    // basicitem.cpp
    template <class T>
    BasicItem<T>::BasicItem()
    {
    }
    

    Erbende Klasse:

    //diritem.h
    class DirItem : public BasicItem<int>
    {
    public:
        DirItem();
    };
    
    //diritem.cpp
    template <class T>
    BasicItem<T>::BasicItem()
    {
    }
    

    Dieses Konstrukt resultiert leider in einem Linker-Fehler:

    Undefined symbols:
    "BasicItem<int>::BasicItem()", referenced from:
    DirItem::DirItem()in diritem.o
    DirItem::DirItem()in diritem.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    make: *** [test2] Error 1

    Ich vermute einfach mal das sowas in C++ möglich ist ;-).

    Kann mir da vielleicht jemand auf die Sprünge helfen? 😕 😕 😕

    Danke!





  • DerHandwerk schrieb:

    //diritem.h
    class DirItem : public BasicItem<int>
    {
    public:
        DirItem();
    };
    

    DirItem::DirItem wurde deklariert, aber nirgends definiert.



  • Super Danke für die schnelle Hilfe.

    Ich habe einfach alles in die Header Datei gepackt (alles aus der .cpp Datei) und jetzt läuft es.

    Habt vielen Dank!



  • DerHandwerk schrieb:

    Ich habe einfach alles in die Header Datei gepackt (alles aus der .cpp Datei) und jetzt läuft es.

    Auch die Definition von DirItem::DirItem, welche in einer Header-Datei nichts zu suchen hat (!) -- es sei denn, sie ist inline ?



  • krümelkacker schrieb:

    DerHandwerk schrieb:

    Ich habe einfach alles in die Header Datei gepackt (alles aus der .cpp Datei) und jetzt läuft es.

    Auch die Definition von DirItem::DirItem, welche in einer Header-Datei nichts zu suchen hat (!) -- es sei denn, sie ist inline ?

    Ich vermute mal dass er da einen copy&paste-fehler begangen hat und inder diritem.cpp auch der entsprechende Konstruktor definiert wurde und NICHT der Ctor von BasicItem.

    @DerHandwerk, dir sei nahegelegt, vor der nächsten Frage die mit wichtig gekennzeichneten Threads durchzulesen und danach zu handeln, bevor du fragst - dzu gehört unter anderem das Lesen der FAQ und der Besuch von google.


Anmelden zum Antworten