templates
-
also habe folgendes problem mit templates:
ich habe eine methode die mir eine zahl ins binäre umrechnetheader:
template <class T> string sDez2Bin( T Zahl, bool fuehrende = true, int stellen = 16 );
cppfile:
template <class T> string sDez2Bin( T Zahl, bool fuehrende, int stellen ) { ...... }
und wenn ich das tue:
#include "funcs.h" #include <iostream> using namespace std; int main (){ string temp = sDez2Bin( 10 ); cout <<temp; return 0; }
kommt der lustige linker fehler:
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl sDez2Bin(int,bool,int)" (?sDez2Bin@@YA?AV?char_traits@D@std@@V?$allocator@
D@2@@std@@H_NH@Z)
Debug/Shiften.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweiseachja ich benutze den ms compiler mit visual c++ 6.0
-
Hallo,
templates lassen sich leider nicht in dieser Form auf Header und Implementierungsdatei verteilen. Am einfachsten ist es wohl, wenn DU Dein .cpp-File umbenennst in .inl und es dann am Ende in der Header-Datei per #include einbindest.
Das ganze liegt daran, daß der Compiler in dem Moment, wo er das template instanziieren soll die Definition des templates sehen muß. Und in Deinem Header steht halt nur die Deklaration. Wenn Du die Suchfunktion benutzt dürftest Du noch einiges Infos dazu finden, das ist ein häufiges Problem
MfG Jester