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);
};
#endifDie 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 functionmain': bsp.cpp:(.text+0x1e): undefined reference tospline<int, int>::spline(int)'
collect2: ld returned 1 exit statusInteressanterweise ist folgendes anzumerken:
- Falls ich die Klasse nicht als Template defineire (was in diesem Besipiel eh nicht benötigt wird), dann funktioniert alles.
- 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