template methode

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

template methode

Beitrag von DBGTMaster »

Hallo,

Code: Alles auswählen

class TcpMainThread : public QThread
{
    Q_OBJECT
private:

    //...

public:

    //...

    template <typename T>
    T* newCommand();

    //...

signals:

    //...

public slots:

};

Code: Alles auswählen

template <typename T>
T* TcpMainThread::newCommand() {

    return new T;
}
Das erstellen eines solches Objektes funktioniert Problemlos, will ich aber nun die Template Methode aufrufen:

Code: Alles auswählen

TcpMainThread::instance()->newCommand<TcpCommand_Login>()
erhalte ich:
C:\Users\thomas\qt\client-build-desktop\..\intranet_client\LoginWindow.cpp:26: Fehler:undefined reference to `TcpCommand_Login* TcpMainThread::newCommand<TcpCommand_Login>()'
Ich rate mal, dass die Deklation fehlerhaft ist... Meine Deklration wird sagen, dass meine ganze Klasse ein template ist und nicht nur diese eine Methode... Nur ich finde im Internet nicht irgendwie etwas passendes.
Woran liegts :(??

lG
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: template methode

Beitrag von franzf »

Problem wird sein, dass du die Definition in eine.cpp gesteckt hast. Templates sind Vorlagen und werden für jeden template-Parameter neu instanziiert, deshalb gibt es nicht "die eine Definition". Dafür muss eben auch die Definition für den Compiler auffindbar sein, damit er aus dem generischen Code einen konkreten Code erzeugen kann.
Kurz: Du musst die Definition in deinen Header packen :)
Antworten