<?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[[gelöst]Problem mit Verschattung]]></title><description><![CDATA[<p>In meiner Windows-IDE Dev-C++ stürzt mein Programm immer wieder ab ohne das der Compiler was dazu sagt.</p>
<pre><code>template &lt;class T&gt; class slistElement
{
  private:
    T data;
    slistElement&lt;T&gt;* next;

  public:
    slistElement(T wert)
    {
         data = wert;
         next = NULL;
    }
    T getData()
    {
         return data;
    }
    void setData(T data)
    {
         this-&gt;data = data;
    }

    slistElement&lt;T&gt;* getNext()
    {
         return next;
    }
    void setNext(slistElement&lt;T&gt;* next)
    {
         this-&gt;next = next;
    }
};
</code></pre>
<p>Ich hab den Fehler soweit eingegrenzt das es an diesem &quot;this&quot; in Zeile 19 und 28 liegen muss, aber ich weiß nicht wie ich es beheben kann. This ist bisher das einzige was wir gelernt haben um mit Verschattung umzugehen und Google liefert Solarenergielösungen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Hat jemand eine Idee warum das nicht funktioniert und wie man das beheben kann?</p>
<p>EDIT: Ich darf die Namen alle nicht ändern, also ich komm nicht um die Verschattung drum rum.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286889/gelöst-problem-mit-verschattung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 18:49:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286889.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 May 2011 09:58:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst]Problem mit Verschattung on Wed, 18 May 2011 11:38:35 GMT]]></title><description><![CDATA[<p>In meiner Windows-IDE Dev-C++ stürzt mein Programm immer wieder ab ohne das der Compiler was dazu sagt.</p>
<pre><code>template &lt;class T&gt; class slistElement
{
  private:
    T data;
    slistElement&lt;T&gt;* next;

  public:
    slistElement(T wert)
    {
         data = wert;
         next = NULL;
    }
    T getData()
    {
         return data;
    }
    void setData(T data)
    {
         this-&gt;data = data;
    }

    slistElement&lt;T&gt;* getNext()
    {
         return next;
    }
    void setNext(slistElement&lt;T&gt;* next)
    {
         this-&gt;next = next;
    }
};
</code></pre>
<p>Ich hab den Fehler soweit eingegrenzt das es an diesem &quot;this&quot; in Zeile 19 und 28 liegen muss, aber ich weiß nicht wie ich es beheben kann. This ist bisher das einzige was wir gelernt haben um mit Verschattung umzugehen und Google liefert Solarenergielösungen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Hat jemand eine Idee warum das nicht funktioniert und wie man das beheben kann?</p>
<p>EDIT: Ich darf die Namen alle nicht ändern, also ich komm nicht um die Verschattung drum rum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065140</guid><dc:creator><![CDATA[benny111]]></dc:creator><pubDate>Wed, 18 May 2011 11:38:35 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Problem mit Verschattung on Wed, 18 May 2011 10:05:08 GMT]]></title><description><![CDATA[<p>benny111 schrieb:</p>
<blockquote>
<p>Dev-C++</p>
</blockquote>
<p><a href="http://www.c-plusplus.net/forum/237002" rel="nofollow">Dev-C++ ist veraltet</a></p>
<p>benny111 schrieb:</p>
<blockquote>
<p>Ich hab den Fehler soweit eingegrenzt das es an diesem &quot;this&quot; in Zeile 19 und 28 liegen muss, aber ich weiß nicht wie ich es beheben kann.</p>
</blockquote>
<p>Dann kann ich nur raten, das du einen uninitialisierten Zeiger auf ein solches Element verwendest (this daher ungültig ist). Der Begriff &quot;Verschattung&quot; ist mir übrigens noch nie über den Weg gelaufen.</p>
<p>P.S: Zudem bitte in Zukunft statt den code-Tags die cpp-Tags verwenden (Button &quot;C/C++&quot;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065146</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 May 2011 10:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Problem mit Verschattung on Wed, 18 May 2011 10:05:02 GMT]]></title><description><![CDATA[<p>Das mit der Verschattung haste doch gut gelöst.<br />
Das Prog stürzt wohl aus anderen Gründen ab.<br />
Vielleicht im Konstruktor der Liste den anker nicht auf NULL gesetzt?</p>
<p>Und wenn irgend möglich verlasse Dev-C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065147</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 18 May 2011 10:05:02 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Problem mit Verschattung on Wed, 18 May 2011 10:19:24 GMT]]></title><description><![CDATA[<p>bin auch dabei auf codeblocks umzusteigen (selbe Fehlermeldung)<br />
ich schreib hier mal den ganzen Code auf, vielleicht könnt ihr da mehr erkennen als ich:</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

#include &quot;lists.h&quot;

int main()
{
    sList&lt;int&gt; test;
    slistElement&lt;int&gt; ele(18);
    test.append(&amp;ele);
    test.ausgabe();

    cin.ignore();
    cin.get();
}
</code></pre>
<p>lists.h:</p>
<pre><code class="language-cpp">template &lt;class T&gt; class slistElement
{
  private:
    T data;
    slistElement&lt;T&gt;* next;

  public:
    slistElement(T wert)
    {
         data = wert;
         next = NULL;
    }
    T getData()
    {
         return data;
    }
    void setData(T data)
    {
         this-&gt;data = data;
    }

    slistElement&lt;T&gt;* getNext()
    {
         return next;
    }
    void setNext(slistElement&lt;T&gt;* next)
    {
         this-&gt;next = next;
    }
};

template &lt;class T&gt; class sList
{
  private:
    slistElement&lt;T&gt;* head;

  public:
    /* Konstruktor */
    sList()
    {
           head = NULL;
    }

    /* Anhaengen eines Listenelements an das Ende */
    void append(slistElement&lt;T&gt;* e)
    {
         //Ans Ende springen
         slistElement&lt;T&gt;* current = head;
         while (current != NULL)
               current = current-&gt;getNext();
         //Element anhängen
         T wert = e-&gt;getData();
         current-&gt;setData(wert);
         current-&gt;setNext(NULL);
    }

    /* Ausgabe der List */
    void ausgabe()
    {
         slistElement&lt;T&gt;* current = head;
         while (current != NULL)
         {
               cout &lt;&lt; current-&gt;getData() &lt;&lt; &quot; &quot;;
               current = current-&gt;getNext();
         }
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2065154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065154</guid><dc:creator><![CDATA[benny111]]></dc:creator><pubDate>Wed, 18 May 2011 10:19:24 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Problem mit Verschattung on Wed, 18 May 2011 10:37:07 GMT]]></title><description><![CDATA[<p>benny111 schrieb:</p>
<blockquote>
<p>ich schreib hier mal den ganzen Code auf, vielleicht könnt ihr da mehr erkennen als ich:</p>
</blockquote>
<p>Ich habe da schon mehrere Kommentare.</p>
<p>1. Normalerweise sind die Implementierungsdetails der Listenelemente nicht Teil der Schnittstelle, ich würde erwarten das der append-Aufruf mit int, nicht mit Listenelementen arbeitet.</p>
<pre><code class="language-cpp">// statt
sList&lt;int&gt; test;
slistElement&lt;int&gt; ele(18);
test.append(&amp;ele);

// erwarte ich eher
sList&lt;int&gt; test;
test.append(18);
</code></pre>
<p>2. Die Ausgabe sollte in der Regel von der Liste getrennt werden. Was ist, wenn du die Liste mal irgendwann in einem Windowsprogramm nutzen willst? So müsstest du die Liste ändern.</p>
<p>3. Du solltest dich mal mit der Initialisierungsliste eines Konstruktors auseinander setzen.</p>
<pre><code class="language-cpp">template &lt;class T&gt; class slistElement
...

//statt
    slistElement(T wert)
    {
         data = wert; // &lt;-- Zuweisung, nicht initialisierung
         next = NULL;
    }

// besser:
    slistElement(T wert)
    :   data(wert), // &lt;-- Initialisierungskiste
        next(NULL)
    {
    }
</code></pre>
<p>4. Du weist dem ersten Element initial eine NULL zu (In sList::sList, &quot;head = NULL&quot;), und überlege dir mal was du dann in append damit machst.</p>
<pre><code class="language-cpp">void append(slistElement&lt;T&gt;* e)
{
    //Ans Ende springen
    slistElement&lt;T&gt;* current = head; // current ist anschließend NULL
    // ...
    current-&gt;setData(wert); // Zugriff auf undefiniertes Element!
    // ...
};
</code></pre>
<p>Mit Anmerkung 1 zusammen würde ich mehrere Dinge ändern:</p>
<pre><code class="language-cpp">// UNGETESTET AUS DEM KOPF GESCHRIEBEN!
void append(T element)
{
    // Wenn kein Element existiert ein neues anlegen
    if(head == null) {
        head = new slistElement&lt;T&gt;(element);
        return;
    }

    // Ansonsten an den Elementvorgänger anhängen
    // - Vorgänger (letztes Element) ermitteln
    slistElement&lt;T&gt; * parent = head;
    while(parent-&gt;next)
        parent = parent-&gt;next;
    // - An letztes Element anhängen
    parent-&gt;next = new slistElement&lt;T&gt;(element);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2065167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065167</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 May 2011 10:37:07 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Problem mit Verschattung on Wed, 18 May 2011 10:42:19 GMT]]></title><description><![CDATA[<p>Du bist mit der Schleife gelaufen, bis current==NULL war, das war eins zu weit. Und ich sehe gar nicht, wie Du die Verkettung gebastelt hast.</p>
<pre><code class="language-cpp">if(head==NULL)
            //einfach
         else
         {
            //Ans Ende springen
            slistElement&lt;T&gt;* current = head;
            while (current-&gt;getNext() != NULL)
                  current = current-&gt;getNext();
            //Element anhängen
            current-&gt;setNext(e);
            e-&gt;setNext(NULL);
       }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2065172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065172</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 18 May 2011 10:42:19 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Problem mit Verschattung on Wed, 18 May 2011 11:38:00 GMT]]></title><description><![CDATA[<p>Habs hinbekommen, danke für eure <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065197</guid><dc:creator><![CDATA[benny111]]></dc:creator><pubDate>Wed, 18 May 2011 11:38:00 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst]Problem mit Verschattung on Wed, 18 May 2011 11:45:21 GMT]]></title><description><![CDATA[<p>benny111 schrieb:</p>
<blockquote>
<p>Mein Problem ist, das ich die ganzen Variablennamen und Funktionsköpfe usw. nicht verändern darf.</p>
</blockquote>
<p>Was gerade bei der Listenschnittstelle eine sehr schwachsinnige Anforderung ist, da die Listenelemente auch zwangsweise mit neu erzeugt werden müssen, und dies unter keinen Umständen vergessen werden darf.</p>
<p>Gute Schnittstellen sind Schnittstellen, die möglichst keine Fehler erlauben. Zudem sollte die Allozierung und Freigabe immer an einer Stelle erfolgen, auch dieses Prinzip wird hier verletzt.</p>
<p>Dein Lehrer/Dozent ist entweder schlecht, oder er baut absichtlich diesen Fallstrick ein, um ihn später aufzulösen.</p>
<p>benny111 schrieb:</p>
<blockquote>
<p>Hab jetzt versucht sämtliche Ratschläge zu beherzigen, das ist dabei raus gekommen:</p>
</blockquote>
<p>Leider sind teile der Ratschläge nur mit einer geänderten Schnittstelle sinnvoll.</p>
<pre><code class="language-cpp">...
    void append(slistElement&lt;T&gt;* e)
    {
        T wert = e-&gt;getData();
        // Wenn kein Element existiert ein neues anlegen
        if(head == NULL)
        {
            head = new slistElement&lt;T&gt;(wert);
            return;
        }
...
</code></pre>
<p>Da in diesem Fall das Element übergeben wird, darf im Append kein neues angelegt werden, sondern muss e verwendet werden.</p>
<pre><code class="language-cpp">...
    void append(slistElement&lt;T&gt;* e)
    {
        // Wenn kein Element existiert, e als erstes nehmen
        if(head == NULL)
        {
            head = e;
            return;
        }
...
</code></pre>
<p>Den Rest lasse ich dir dennoch erst einmal als Denkaufgabe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2065217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2065217</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Wed, 18 May 2011 11:45:21 GMT</pubDate></item></channel></rss>