Probleme mit eigenem Header [beantwortet]
-
Hallo!
Diesmal habe ich mich daran versucht einen eignen Header zu schreiben, indem auch Templates vorkommen. Aber bei der Klasse Vector bekomme ich Probleme und weiß nicht, wie ich es anstellen soll.
Mein Header sieht folgendermaßen aus:
//qsort.h template<class T> void tausche(T& a, T& b) ; template <class T> bool kleiner(const T& a, const T& b) ; template <class T> void drucke(const vector<T> & V); template <class T> void quicksort(vector <T> & a, int links, int rechts);Dazu
// qsort.cpp #include <iostream> #include <vector> #include <cstddef> #include "qsort.h" using namespace std; template<class T> void tausche(T& a, T& b) { // a und b vertauschen const T TEMP = a; a = b; b = TEMP; } /* Die folgende Funktion würde auch mit der Parameterliste (T a, T b) arbeiten, dh. die entsprechenden Werte kopieren. Da T aber ein bel. Datentyp sein kann, wird eine Referenz beforzugt um Kopien von möglicherweise sehr großen Objekten zu vermeiden. */ template <class T> bool kleiner(const T& a, const T& b) { //Vergleich mittels '<', was nicht bei allen Datentypen wohldefiniert ist. return a < b; //Der Vergleich wird in eine extra Funktion verlagert um spätere Änderungen zu vereinfachen. } template <class T> void drucke(const vector<T> & V) { for(size_t i = 0; i < V.size(); i++) cout << V[i] << ' '; cout << endl; } template <class T> void quicksort(vector <T> & a, int links, int rechts) { int li = links, re = rechts; T el = a[(links + rechts)/2]; do { while(kleiner(a[li],el)) ++li; while(kleiner(el, a[re])) --re; if(li < re) tausche(a[li], a[re]); if(li <= re) {++li; --re;} } while(li <= re); if(links < re) quicksort(a, links, re); if(li < rechts) quicksort(a, li, rechts); }Leider bekomme ich beim Kompilieren u.a. die Meldung, dass ich keine Vektoren ohne Typ anlegen darf. Wie kann ich das sonst machen, wenn ich mich auf keinen Typ festlegen will?
Und kennt jemand einen guten Link mit Erklärung zu eigenen Headerdateien etc.? Mit meinem Buch alleine komme ich nicht weiter und vergoogelt hab ich mich auch schon.
Danke sehr auf jeden Fall schon mal!
-
Du musst bei templates Deklaration und Definition der Methoden im Header unterbringen. Also alles was in der qsort.cpp steht in die qsort.h verfrachten. Entweder gleich rüberkopieren, oder am Ende includieren, dann aber die Datei von .cpp in .impl oder .inl oder was auch immer umbenennen.
Außerdem fehlt mir noch ein include-guard in deinem Header.// edit:
Wusst ich doch dass dazu was in der FAQ hier steht:
http://c-plusplus.net/forum/viewtopic-var-t-is-151578.html
Punkt 5
-
Vielen Dank!