Klassentemplates: Porbleme bei externer Funktionsdefinition



  • Ich habe folgendes Problem. Ich habe eine Templateklasse, welche in der Datei bsp.h definiert wird und deren Konstruktor aber in der Datei bsp2.c definiert ist. Wenn ich jetzt zuerst bsp2.c kompiliere und dann die Datei mit der main-Methode, dann kommt eine Fehlermeldung. Im Detail sieht mein Code so aus:

    Die Datei bsp.h:
    #ifndef ITERATE_H
    #define ITERATE_H
    template <typename MESH, typename PARAM> class spline{
    public:
    int n;
    spline(int n_in);
    };
    #endif

    Die Datei bsp2.c:
    #include "bsp.h"
    #include <stdio.h>
    template <typename MESH, typename PARAM> spline <MESH,PARAM>::spline(int n_in){
    n = n_in;
    printf("n = %d", n);
    }

    Die Datei bsp.c:
    **#include "bsp.h"

    int main( int argc, char argv[] )
    {
    int n=3;
    spline <int,int> itera (n);
    }
    *

    Ich kompiliere nun zuerst bsp2.c:
    g++ bsp2.c -c -o bsp2.o
    Das klappt auch wunderbar!

    Beim Compilieren & Linken von bsp.c
    g++ bsp.c -o bsp bsp2.o
    kommt nun aber folgende Fehlermeldung
    /tmp/ccqrkRTj.o: In function main': bsp.cpp:(.text+0x1e): undefined reference tospline<int, int>::spline(int)'
    collect2: ld returned 1 exit status

    Interessanterweise ist folgendes anzumerken:

    1. Falls ich die Klasse nicht als Template defineire (was in diesem Besipiel eh nicht benötigt wird), dann funktioniert alles.
    2. Falls ich den Inhalt der drei Dateien in eine Datei reinscheibe, dann funktioniert es ebenfalls

    Habt ihr eine Idee woran das liegen könnte? Vielen Dank schonmal!&;[e]



  • Hallo

    Du must Template-Implementationen die in anderen Übersetzungseinheiten mit eingebunden werden mit in den Header schreiben. Gibt schon 100e Threads dazu.

    Und sfds

    bis bald
    akari



  • danke


Anmelden zum Antworten