eigenen iterator erstellen
-
Hallo Zusammen,
ich will eine eigene Queueklasse erstellen, welche sich beim einfügen automatisch nach bestimmten Angaben sortiert. für die Sortierung will ich algorithm/sort verwenden, wofür ich aber einen eigen Iterator Implementierung brauche. Da habe ich aber Probleme. Insbesondere geht folgender Aufruf nicht:
LTQueue::iterator it = queue->begin(); while(it != queue->end()){ std::cout << it <<std::endl; it++; }//End while [/code] Der Fehler lautet:error: no match for ‘operator<<’ in ‘std::cout << it’
[/code]
Meine Klassen in Kurzform:class LTNode { public: LTNode(); LTNode(bool deliverable, int sequ, int nodeId, int lt, int pdu); LTNode(const LTNode& orig); ... void setNextNode(LTNode* next); LTNode* getNextNode() const; void setPreviousNode(LTNode* prev); LTNode* getPreviousNode() const; private: bool deliverable; int sequ; int nodeId; int lt; int pdu; LTNode *prev; LTNode *next; };class LTQueue { public: LTQueue(); virtual ~LTQueue(); bool enqueue(LTNode* node); bool enqueue(bool deliverable, int nodeId, int sequ, int lt, int pdu); void dequeue(); LTNode* find(int nodeId, int sequ); LTNode* top(); void clearList(); void updateLT(int nodeId, int sequ); void updateDeleverable(int nodeId, int sequ); // Oeffentliche Iteratorklasse class iterator { private: // Zeiger auf aktuelles Element LTNode* current; public: iterator(LTNode* elem = 0); ~iterator(void); iterator(const iterator& it); iterator & operator=(const iterator it); bool operator==(const iterator& it); bool operator!=(const iterator& it); LTNode& operator*(void) const; iterator & operator++(void); iterator operator++(int dummy); }; iterator begin(void); iterator end(void); private: void sortList(); LTNode* first; LTNode* last; };Ich gehe mal davon aus, dass ich bei der Definition der Iteratorklasse etwas falsch gemacht habe, bzw. es nicht ganz verstanden habe. Jemand nen Tipp? Vielen Dank.
mfg, uwe
-
Wenn du die tatsächlichen Werte der Queue ausgeben willst, musst du, wie beu Zeigern auch, sie derefferenzieren (der refferenzierte Typ sollte dann aber eine Überladung für operator<< besitzten).
LTQueue::iterator it = queue->begin(); while(it != queue->end()){ std::cout << *it <<std::endl; // sollte klappen (je nach Typ der Queue) it++; }//End whileDen Derefferenzierungsoperator musst du selbstverständlich selber implementieren (ließ überladen).
-
Hi,
also ich will das aktuelle Element in der Queue ausgeben. Wenn ich auf einzelnen Elemente dieses Objektes zugreifen will, über "it->" bekomme ich in der IDE nur eine Liste mit einzelnen Operatorfunktionen aufgezeigt. Wenn ich direkt dereferenziere über "(*it)" kann ich zwar auf die einzelnen Funktionen zugreifen, aber ich bekomme immer dann folgenden Fehler:
error: no match for ‘operator<<’ in ‘std::cout << it.LTQueue::iterator::operator*()’Allerdings gibt es aber in LTNode die folgende Methode:
std::ostream & operator<<(std::ostream& stream, const LTNode& node) { return stream << "nodeID: " << node.getNodeID() << " " << "lt: " << node.getLT() << " " << "sequ: " << node.getSequ() << " " << "deliverable: " << node.isDeliverable() << "\n"; }Wo ist mein Gedankenfehler? Danke!
uwe