<?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[selbstgebaute c++ liste]]></title><description><![CDATA[<p>Servus @ all,</p>
<p>ich hab ein kleines Problem mit ner selbstgebauten, rekursiven generischen Liste. Genauer gesagt geht es um die merge-Methode. Bekomme das Teil ums Verrecken net zum laufen und bin so langsam mit meinem Latein am Ende! Wäre dankbar für Lösungsansätze...<br />
Der Fehler taucht in Zeile 101 auf. Meldung lautet wie folgt:</p>
<p><strong>ungültige Umwandlung von »GenericList&lt;char&gt;*« in »char«</strong></p>
<pre><code class="language-cpp">#ifndef GENERICLIST_H
#define GENERICLIST_H

template &lt;class Head&gt; class GenericList{
    public:
        GenericList();
        GenericList(Head newHead);
        int getLength();
        void putElementAtIndex(Head newHead, int index);
        void putLast(Head newHead);
        void putFirst(Head newHead);
        void removeLast();
        void removeFirst();
        void merge(GenericList other);
        Head getElementAtIndex(int index);
        Head getFirst();
        Head getLast();
        bool elementExists(Head element);
        bool isSorted();
    protected:
    private:
        Head head;
        GenericList *tail;
        int _getLength(int length);
};

template &lt;class Head&gt; GenericList&lt;Head&gt;::GenericList(){
    head = NULL;
    tail = NULL;
}

template &lt;class Head&gt; GenericList&lt;Head&gt;::GenericList(Head newHead){
    head = newHead;
    tail = NULL;
}

template &lt;class Head&gt; int GenericList&lt;Head&gt;::getLength(){
    int length;
    length = 1;
    return _getLength(length);
}

template &lt;class Head&gt; int GenericList&lt;Head&gt;::_getLength(int length){
    if(tail != NULL){
        length++;
        length = tail-&gt;_getLength(length);
    }
    return length;
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::putElementAtIndex(Head newHead, int index){
    if(index+1 &lt;= getLength()){
        if(index != 0){
            tail-&gt;putElementAtIndex(newHead, --index);
        }else if(index == 0){
            putFirst(newHead);
        }
    }
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::putLast(Head newHead){
    if (tail != NULL){
        tail-&gt;putLast(newHead);
    }else{
        tail = new GenericList(newHead);
    }
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::putFirst(Head newHead){
    if(tail == NULL){
        tail = new GenericList(head);
    }else{
        tail-&gt;putFirst(head);
    }
    head = newHead;
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::removeLast(){
    if(tail-&gt;tail == NULL){
        tail = NULL;
    }else{
        tail-&gt;removeLast();
    }
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::removeFirst(){
    head = tail-&gt;head;
    tail = tail-&gt;tail;
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::merge(GenericList other){
    if(isSorted() &amp;&amp; other.isSorted()){
        if(head &lt;= other.head){
            if(tail == NULL){
                tail = &amp;other;
            }else{
                tail-&gt;merge(other);
            }
        }else{
            putFirst(other.head);
            tail-&gt;merge(other.tail); //Hier wird der Fehler produziert... siehe unten...
        }
    }
}

template &lt;class Head&gt; Head GenericList&lt;Head&gt;::getElementAtIndex(int index){
    if(index+1 &lt;= getLength()){
        if(index != 0){
            return tail-&gt;getElementAtIndex(--index);
        }else{
            return head;
        }
    }else{
        return NULL;
    }
}

template &lt;class Head&gt; Head GenericList&lt;Head&gt;::getFirst(){
    return head;
}

template &lt;class Head&gt; Head GenericList&lt;Head&gt;::getLast(){
    return getElementAtIndex(getLength()-1);
}

template &lt;class Head&gt; bool GenericList&lt;Head&gt;::elementExists(Head element){
    if(tail != NULL){
        if(head == element){
            return true;
        }else{
            return tail-&gt;elementExists(element);
        }
    }else{
        if(head == element){
            return true;
        }else{
            return false;
        }
    }
}

template &lt;class Head&gt; bool GenericList&lt;Head&gt;::isSorted(){
    if(tail == NULL){
        return true;
    }else{
        if(head &lt;= tail-&gt;head){
            return tail-&gt;isSorted();
        }else{
            return false;
        }
    }
}

#endif // GENERICLIST_H
</code></pre>
<p>Getestet wird das Ganze wie folgt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;GenericList.h&quot;

using namespace std;

int main()
{
    GenericList&lt;char&gt; testGeneric('b');
    testGeneric.putLast('d');
    testGeneric.putFirst('a');
    testGeneric.putElementAtIndex('c', 2);

    GenericList&lt;char&gt; testGeneric2('e');
    testGeneric2.putLast('g');
    testGeneric2.putLast('x');
    testGeneric2.putLast('z');

    testGeneric.merge(testGeneric2);

    return 0;
}
</code></pre>
<p>Danke schon mal im Voraus!</p>
<p>Grüß, Olli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241305/selbstgebaute-c-liste</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 16:24:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241305.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 May 2009 19:48:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to selbstgebaute c++ liste on Mon, 18 May 2009 19:48:56 GMT]]></title><description><![CDATA[<p>Servus @ all,</p>
<p>ich hab ein kleines Problem mit ner selbstgebauten, rekursiven generischen Liste. Genauer gesagt geht es um die merge-Methode. Bekomme das Teil ums Verrecken net zum laufen und bin so langsam mit meinem Latein am Ende! Wäre dankbar für Lösungsansätze...<br />
Der Fehler taucht in Zeile 101 auf. Meldung lautet wie folgt:</p>
<p><strong>ungültige Umwandlung von »GenericList&lt;char&gt;*« in »char«</strong></p>
<pre><code class="language-cpp">#ifndef GENERICLIST_H
#define GENERICLIST_H

template &lt;class Head&gt; class GenericList{
    public:
        GenericList();
        GenericList(Head newHead);
        int getLength();
        void putElementAtIndex(Head newHead, int index);
        void putLast(Head newHead);
        void putFirst(Head newHead);
        void removeLast();
        void removeFirst();
        void merge(GenericList other);
        Head getElementAtIndex(int index);
        Head getFirst();
        Head getLast();
        bool elementExists(Head element);
        bool isSorted();
    protected:
    private:
        Head head;
        GenericList *tail;
        int _getLength(int length);
};

template &lt;class Head&gt; GenericList&lt;Head&gt;::GenericList(){
    head = NULL;
    tail = NULL;
}

template &lt;class Head&gt; GenericList&lt;Head&gt;::GenericList(Head newHead){
    head = newHead;
    tail = NULL;
}

template &lt;class Head&gt; int GenericList&lt;Head&gt;::getLength(){
    int length;
    length = 1;
    return _getLength(length);
}

template &lt;class Head&gt; int GenericList&lt;Head&gt;::_getLength(int length){
    if(tail != NULL){
        length++;
        length = tail-&gt;_getLength(length);
    }
    return length;
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::putElementAtIndex(Head newHead, int index){
    if(index+1 &lt;= getLength()){
        if(index != 0){
            tail-&gt;putElementAtIndex(newHead, --index);
        }else if(index == 0){
            putFirst(newHead);
        }
    }
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::putLast(Head newHead){
    if (tail != NULL){
        tail-&gt;putLast(newHead);
    }else{
        tail = new GenericList(newHead);
    }
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::putFirst(Head newHead){
    if(tail == NULL){
        tail = new GenericList(head);
    }else{
        tail-&gt;putFirst(head);
    }
    head = newHead;
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::removeLast(){
    if(tail-&gt;tail == NULL){
        tail = NULL;
    }else{
        tail-&gt;removeLast();
    }
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::removeFirst(){
    head = tail-&gt;head;
    tail = tail-&gt;tail;
}

template &lt;class Head&gt; void GenericList&lt;Head&gt;::merge(GenericList other){
    if(isSorted() &amp;&amp; other.isSorted()){
        if(head &lt;= other.head){
            if(tail == NULL){
                tail = &amp;other;
            }else{
                tail-&gt;merge(other);
            }
        }else{
            putFirst(other.head);
            tail-&gt;merge(other.tail); //Hier wird der Fehler produziert... siehe unten...
        }
    }
}

template &lt;class Head&gt; Head GenericList&lt;Head&gt;::getElementAtIndex(int index){
    if(index+1 &lt;= getLength()){
        if(index != 0){
            return tail-&gt;getElementAtIndex(--index);
        }else{
            return head;
        }
    }else{
        return NULL;
    }
}

template &lt;class Head&gt; Head GenericList&lt;Head&gt;::getFirst(){
    return head;
}

template &lt;class Head&gt; Head GenericList&lt;Head&gt;::getLast(){
    return getElementAtIndex(getLength()-1);
}

template &lt;class Head&gt; bool GenericList&lt;Head&gt;::elementExists(Head element){
    if(tail != NULL){
        if(head == element){
            return true;
        }else{
            return tail-&gt;elementExists(element);
        }
    }else{
        if(head == element){
            return true;
        }else{
            return false;
        }
    }
}

template &lt;class Head&gt; bool GenericList&lt;Head&gt;::isSorted(){
    if(tail == NULL){
        return true;
    }else{
        if(head &lt;= tail-&gt;head){
            return tail-&gt;isSorted();
        }else{
            return false;
        }
    }
}

#endif // GENERICLIST_H
</code></pre>
<p>Getestet wird das Ganze wie folgt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;GenericList.h&quot;

using namespace std;

int main()
{
    GenericList&lt;char&gt; testGeneric('b');
    testGeneric.putLast('d');
    testGeneric.putFirst('a');
    testGeneric.putElementAtIndex('c', 2);

    GenericList&lt;char&gt; testGeneric2('e');
    testGeneric2.putLast('g');
    testGeneric2.putLast('x');
    testGeneric2.putLast('z');

    testGeneric.merge(testGeneric2);

    return 0;
}
</code></pre>
<p>Danke schon mal im Voraus!</p>
<p>Grüß, Olli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712457</guid><dc:creator><![CDATA[hornet_23]]></dc:creator><pubDate>Mon, 18 May 2009 19:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to selbstgebaute c++ liste on Mon, 18 May 2009 20:21:59 GMT]]></title><description><![CDATA[<p>GenericList&lt;Head&gt;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712476</guid><dc:creator><![CDATA[überflowgen]]></dc:creator><pubDate>Mon, 18 May 2009 20:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to selbstgebaute c++ liste on Tue, 19 May 2009 06:50:41 GMT]]></title><description><![CDATA[<pre><code>tail-&gt;merge(*other.tail);
</code></pre>
<p>Tipp 1: merge(GenericList other) -&gt; hier möchtest Du 'other' ganz sicher nicht by value übergeben<br />
Tipp 2: google(&quot;const correctness&quot;), denn merge() sollte eine const Referenz einer GenericList übergeben bekommen, wobei das const daran scheitert, dass isSorted() nicht const ist, obwohl es am inneren Zustand der GenericLIst nichts verändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712572</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Tue, 19 May 2009 06:50:41 GMT</pubDate></item><item><title><![CDATA[Reply to selbstgebaute c++ liste on Tue, 19 May 2009 07:32:42 GMT]]></title><description><![CDATA[<p>THX für die Tipps. Hab's jetzt hinbekommen...<br />
Merge sieht jetzt wie folgt aus:</p>
<pre><code class="language-cpp">template &lt;class Head&gt; void GenericList&lt;Head&gt;::merge(GenericList *other){
    if(isSorted() &amp;&amp; other-&gt;isSorted()){
        if(head &lt;= other-&gt;head){
            if(tail == NULL){
                tail = other;
            }else{
                tail-&gt;merge(other);
            }
        }else{
            putFirst(other-&gt;head);
            tail-&gt;merge(other-&gt;tail);
        }
    }
}
</code></pre>
<p>Das kommt wohl davon, wenn man ewig lang nur noch mit JAVA am rumbasteln ist...</p>
<p>Grüße, Olli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712592</guid><dc:creator><![CDATA[hornet_23]]></dc:creator><pubDate>Tue, 19 May 2009 07:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to selbstgebaute c++ liste on Tue, 19 May 2009 07:50:51 GMT]]></title><description><![CDATA[<p>Der Ansatz ist schief und die Liste fällt um.<br />
So wird das nichts, sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712610</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 19 May 2009 07:50:51 GMT</pubDate></item><item><title><![CDATA[Reply to selbstgebaute c++ liste on Tue, 19 May 2009 08:35:10 GMT]]></title><description><![CDATA[<p>So wird das mit dem merge() nie was. Wenn die an merge() übergebene GenericList gelöscht wird, dann kracht es gewaltig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712641</guid><dc:creator><![CDATA[jencas]]></dc:creator><pubDate>Tue, 19 May 2009 08:35:10 GMT</pubDate></item><item><title><![CDATA[Reply to selbstgebaute c++ liste on Tue, 19 May 2009 11:21:07 GMT]]></title><description><![CDATA[<p>Hab's grad gemerkt... Werd mir dann wohl was anderes einfallen lassen müssen. Trotzdem danke nochmal!</p>
<p>Grüße, Olli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1712720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1712720</guid><dc:creator><![CDATA[hornet_23]]></dc:creator><pubDate>Tue, 19 May 2009 11:21:07 GMT</pubDate></item></channel></rss>