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 funktionsdefinitionen

    template<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.


Anmelden zum Antworten