<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[eigenen iterator erstellen]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>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:</p>
<pre><code class="language-cpp">LTQueue::iterator it = queue-&gt;begin();
    while(it != queue-&gt;end()){
        std::cout &lt;&lt; it &lt;&lt;std::endl;
        it++;
    }//End while
[/code]

Der Fehler lautet:
</code></pre>
<p>error: no match for ‘operator&lt;&lt;’ in ‘std::cout &lt;&lt; it’<br />
[/code]<br />
Meine Klassen in Kurzform:</p>
<pre><code class="language-cpp">class LTNode {
public:
    LTNode();
    LTNode(bool deliverable, int sequ, int nodeId, int lt, int pdu);
    LTNode(const LTNode&amp; 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;

};
</code></pre>
<pre><code class="language-cpp">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&amp; it);
        iterator &amp; operator=(const iterator it);
        bool operator==(const iterator&amp; it);
        bool operator!=(const iterator&amp; it);
        LTNode&amp; operator*(void) const;
        iterator &amp; operator++(void);
        iterator operator++(int dummy);
    };

    iterator begin(void);
    iterator end(void);
private:
    void sortList();
    LTNode* first;
    LTNode* last;
};
</code></pre>
<p>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.</p>
<p>mfg, uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264312/eigenen-iterator-erstellen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 01:17:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264312.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Apr 2010 08:59:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to eigenen iterator erstellen on Tue, 06 Apr 2010 08:59:08 GMT]]></title><description><![CDATA[<p>Hallo Zusammen,</p>
<p>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:</p>
<pre><code class="language-cpp">LTQueue::iterator it = queue-&gt;begin();
    while(it != queue-&gt;end()){
        std::cout &lt;&lt; it &lt;&lt;std::endl;
        it++;
    }//End while
[/code]

Der Fehler lautet:
</code></pre>
<p>error: no match for ‘operator&lt;&lt;’ in ‘std::cout &lt;&lt; it’<br />
[/code]<br />
Meine Klassen in Kurzform:</p>
<pre><code class="language-cpp">class LTNode {
public:
    LTNode();
    LTNode(bool deliverable, int sequ, int nodeId, int lt, int pdu);
    LTNode(const LTNode&amp; 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;

};
</code></pre>
<pre><code class="language-cpp">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&amp; it);
        iterator &amp; operator=(const iterator it);
        bool operator==(const iterator&amp; it);
        bool operator!=(const iterator&amp; it);
        LTNode&amp; operator*(void) const;
        iterator &amp; operator++(void);
        iterator operator++(int dummy);
    };

    iterator begin(void);
    iterator end(void);
private:
    void sortList();
    LTNode* first;
    LTNode* last;
};
</code></pre>
<p>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.</p>
<p>mfg, uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878144</guid><dc:creator><![CDATA[uwerothfeld]]></dc:creator><pubDate>Tue, 06 Apr 2010 08:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to eigenen iterator erstellen on Tue, 06 Apr 2010 09:03:17 GMT]]></title><description><![CDATA[<p>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&lt;&lt; besitzten).</p>
<pre><code class="language-cpp">LTQueue::iterator it = queue-&gt;begin();
while(it != queue-&gt;end()){
std::cout &lt;&lt; *it &lt;&lt;std::endl; // sollte klappen (je nach Typ der Queue)
it++;
}//End while
</code></pre>
<p>Den Derefferenzierungsoperator musst du selbstverständlich selber implementieren (ließ überladen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878146</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Tue, 06 Apr 2010 09:03:17 GMT</pubDate></item><item><title><![CDATA[Reply to eigenen iterator erstellen on Tue, 06 Apr 2010 09:27:20 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich will das aktuelle Element in der Queue ausgeben. Wenn ich auf einzelnen Elemente dieses Objektes zugreifen will, über &quot;it-&gt;&quot; bekomme ich in der IDE nur eine Liste mit einzelnen Operatorfunktionen aufgezeigt. Wenn ich direkt dereferenziere über &quot;(*it)&quot; kann ich zwar auf die einzelnen Funktionen zugreifen, aber ich bekomme immer dann folgenden Fehler:</p>
<pre><code class="language-cpp">error: no match for ‘operator&lt;&lt;’ in ‘std::cout &lt;&lt; it.LTQueue::iterator::operator*()’
</code></pre>
<p>Allerdings gibt es aber in LTNode die folgende Methode:</p>
<pre><code class="language-cpp">std::ostream &amp; operator&lt;&lt;(std::ostream&amp; stream, const LTNode&amp; node) {
    return stream &lt;&lt; &quot;nodeID: &quot; &lt;&lt; node.getNodeID() &lt;&lt; &quot; &quot;
            &lt;&lt; &quot;lt: &quot; &lt;&lt; node.getLT() &lt;&lt; &quot; &quot;
            &lt;&lt; &quot;sequ: &quot; &lt;&lt; node.getSequ() &lt;&lt; &quot; &quot;
            &lt;&lt; &quot;deliverable: &quot; &lt;&lt; node.isDeliverable() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Wo ist mein Gedankenfehler? Danke!<br />
uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1878158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1878158</guid><dc:creator><![CDATA[uwerothfeld]]></dc:creator><pubDate>Tue, 06 Apr 2010 09:27:20 GMT</pubDate></item></channel></rss>