Fehler beim Aufruf von Template Klassen-Funktion
-
Hi zusammen!
Ich habe beim Aufruf per
int iarray[7] = {7, 5, 4, 3, 9, 8, 6}; derdss.bubble(iarray, 7);
diesen Fehler
undefined reference to `void MWSalgo::bubble<int>(int*, int)'|
Wurde das Template "Version" vom Bubblesort falsch als Klassen Funktion geschrieben? -> Wie müsste es sonst aussehen?
Danke
MWSalgo.h
class MWSalgo{ public: MWSalgo(); ~MWSalgo(); template <class X> void bubble(X *items,int counter);
MWSalgo.cpp
template <class X> void MWSalgo::bubble(X *items,int counter) { X t; for(int a=1; a<counter; a++) for(int b=counter-1; b>=a; b--) if(items[b-1] > items[b]) { t = items[b-1]; items[b-1] = items[b]; items[b] = t; } }
-
Du hast hier einen Linker-Fehler, weil das Template in der falschen Datei implementiert ist. Es gehört in die Header-Datei.
Ansonsten ist pointer+länge C-Stil (ohne ++). Übergib, wie in der STL üblich, begin+end-Iteratoren.
Siehe auch https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-array
-
wob schrieb:
Du hast hier einen Linker-Fehler, weil das Template in der falschen Datei implementiert ist. Es gehört in die Header-Datei.
Ansonsten ist pointer+länge C-Stil (ohne ++). Übergib, wie in der STL üblich, begin+end-Iteratoren.
Siehe auch https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-array
Danke.
Ich bin davon ausgegangen, dass man Deklarationen in die Header und die Implementation in die c bzw cpp datei gehört
Ich habe nur Template Versionen von dem angesprochenen Algorithmus in C gefunden.
Wie wäre es sonst in C+?
-
noname1234 schrieb:
Ich habe nur Template Versionen von dem angesprochenen Algorithmus in C gefunden.
Wie wäre es sonst in C+?
Wie wäre es mit dem Versuch das Ganze selbst zu schreiben?
Der Funktionskopf könnte z.B. so aussehen:
template<typename iterator> void bubble(iterator begin, iterator end);