Klassentemplate mit list::iterator
-
Hallo,
ich habe folgendes Problem:
Ich möchte ein Klassentemplate schreiben (siehe unten). In einer der Memberfunktionen verwende ich allerdings den std::list::Iterator zum Zugriff auf die Listenelemente. Dieser bereitet mir allerdings Probleme, wenn ich versuche das Ganze als Template-Funktion zu machen.template<class T> class ListPriorityQueueT { private: std::list <T> entries; int size; public: ListPriorityQueueT(); ListPriorityQueueT(const ListPriorityQueueT &); ListPriorityQueueT & operator= (const ListPriorityQueueT &); bool operator< (const ListPriorityQueueT &); bool operator> (const ListPriorityQueueT &); bool operator== (const ListPriorityQueueT &); void enqueue ( T &); T dequeue () throw (QueueEmptyEx); };hier die entsprechende Funktion:
template<class T> void ListPriorityQueueT<T>::enqueue(T & e) { template<class T> std::list<T> list::iterator it; bool ins = false; for(it= entries.begin(); it != entries.end(); ++it) { if(*it > e) { entries.insert(it, 1, e); ins=true; break; } } if(!ins) { it = entries.end(); entries.push_back(e); } }kann mir wer sagen was falsch ist, und wie es richtig fuktioniert.
MfG
Chris
-
Hallo,
cpp tags sind schöner.
template gibts nicht in funktionsdefinitionentemplate<class T> void ListPriorityQueueT<T>::enqueue(T & e) { //template<class T> HIER std::list<T> list::iterator it; bool ins = false; for(it= entries.begin(); it != entries.end(); ++it) { if(*it > e) { entries.insert(it, 1, e); ins=true; break; } } if(!ins) { it = entries.end(); entries.push_back(e); } }
-
templäd schrieb:
std::list<T> list::iterator it;Sollte wohl eher
std::list<T>::iterator it;heissen?
In bin mir nicht 100% sicher, aber müsste es nicht sogar
typename std::list<T>::iterator it;heissen?
-
funktioniert leider immer noch nicht. Erhalte nun folgende Fehlermeldungen:
ListPriorityQueueT.cc: In member function »void ListPriorityQueueT<T>::enqueue(T&)«:
ListPriorityQueueT.cc:35: Fehler: »list« wurde nicht deklariert
ListPriorityQueueT.cc:35: Fehler: expected initializer before »it«
ListPriorityQueueT.cc:37: Fehler: »it« wurde in diesem Gültigkeitsbereich nicht definiert
-
<list> included und namespace geused bzw. std:: genutzt?
EDIT:
Im Zweifel nochmal aktuellen Code posten.