<?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[Frage zu std::List&amp;lt;&amp;gt;]]></title><description><![CDATA[<p>Ich habe eine std::List&lt;MyObject*&gt; list;</p>
<p>Und möchte mittels Iterator darüber iterieren und eine funktion ignition() aufrufen:</p>
<p>for(std::list&lt;MyObject*&gt;::iterator it=list.begin();it!=list.end();++it){<br />
it-&gt;ignition();</p>
<p>}<br />
Beim bauen erhalte ich diese Meldung:<br />
error: request for member ‘ignition’ in ‘* tg.std::_List_iterator&lt;_Tp&gt;::operator-&gt; [with _Tp = MyObject*, std::_List_iterator&lt;_Tp&gt;::pointer = MyObject**]()’, which is of non-class type ‘MyObject*’</p>
<p>Wie kann ich die Funktion jedes MyObject aufrufen? Bitte um Hilfe!</p>
<p>[Edit] : tg nach it umbenannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299456/frage-zu-std-list-lt-gt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 06:12:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299456.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Feb 2012 15:02:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 15:13:35 GMT]]></title><description><![CDATA[<p>Ich habe eine std::List&lt;MyObject*&gt; list;</p>
<p>Und möchte mittels Iterator darüber iterieren und eine funktion ignition() aufrufen:</p>
<p>for(std::list&lt;MyObject*&gt;::iterator it=list.begin();it!=list.end();++it){<br />
it-&gt;ignition();</p>
<p>}<br />
Beim bauen erhalte ich diese Meldung:<br />
error: request for member ‘ignition’ in ‘* tg.std::_List_iterator&lt;_Tp&gt;::operator-&gt; [with _Tp = MyObject*, std::_List_iterator&lt;_Tp&gt;::pointer = MyObject**]()’, which is of non-class type ‘MyObject*’</p>
<p>Wie kann ich die Funktion jedes MyObject aufrufen? Bitte um Hilfe!</p>
<p>[Edit] : tg nach it umbenannt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179813</guid><dc:creator><![CDATA[DirkS]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:13:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 15:08:24 GMT]]></title><description><![CDATA[<p>Hat es einen Grund dass du auf tg operierst obwohl dein Iterator it heißt? Du inkrementierst auch den falschen.</p>
<p>Ansonsten hast du sozusagen einen Doppelzeiger hier. Machs so:</p>
<pre><code class="language-cpp">(*it)-&gt;ignition();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2179814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179814</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:08:24 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 15:09:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">(*it)-&gt;ignition()
</code></pre>
<p>edit: zu spät.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179815</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:09:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 15:14:17 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Hat es einen Grund dass du auf tg operierst obwohl dein Iterator it heißt? Du inkrementierst auch den falschen.</p>
<p>Ansonsten hast du sozusagen einen Doppelzeiger hier. Machs so:</p>
<pre><code class="language-cpp">(*it)-&gt;ignition();
</code></pre>
</blockquote>
<p>Vielen Dank !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179820</guid><dc:creator><![CDATA[DirkS]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 15:18:20 GMT]]></title><description><![CDATA[<p>Das würde dann auch bedeuten das wenn ich mittels delete Speicher freigeben möchte sollte ich beim Iterieren mit Iterator it so vorgehen:<br />
...</p>
<pre><code class="language-cpp">delete (&amp;it);
</code></pre>
<p>...</p>
<p>Richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179823</guid><dc:creator><![CDATA[DirkS]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 15:31:18 GMT]]></title><description><![CDATA[<p>Ne, in diesem Fall holst du dir die Addresse des Iterators!</p>
<pre><code class="language-cpp">delete &amp;(*it);
</code></pre>
<p>Uerst das Objekt holen und dann per Addressoperator die Addresse des Objektes nehmen.</p>
<p>Wäre halbrichtig. Wieso halbrichtig? Weil du kein delete verwenden solltest.<br />
Gibt es einen Grund wieso du die Objekte per new anlegst? Wenn es denn gibt, mann mach lieber eine std::list&lt;std::unique_ptr&lt;MyObject&gt;&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179827</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:31:18 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 15:39:08 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Uerst das Objekt holen und dann per Addressoperator die Addresse des Objektes nehmen.</p>
</blockquote>
<p>Nur sind die Objekte wiederum Zeiger. Also ist das &amp; zuviel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179830</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:39:08 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 15:40:28 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Uerst das Objekt holen und dann per Addressoperator die Addresse des Objektes nehmen.</p>
</blockquote>
<p>Nur sind die Objekte wiederum Zeiger. Also ist das &amp; zuviel.</p>
</blockquote>
<p>Öhhhh ... stimmt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179832</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 11 Feb 2012 15:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 17:54:58 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Ne, in diesem Fall holst du dir die Addresse des Iterators!</p>
<pre><code class="language-cpp">delete &amp;(*it);
</code></pre>
<p>Uerst das Objekt holen und dann per Addressoperator die Addresse des Objektes nehmen.</p>
<p>Wäre halbrichtig. Wieso halbrichtig? Weil du kein delete verwenden solltest.<br />
Gibt es einen Grund wieso du die Objekte per new anlegst? Wenn es denn gibt, mann mach lieber eine std::list&lt;std::unique_ptr&lt;MyObject&gt;&gt;.</p>
</blockquote>
<p>Danke für die Hilfe, hat funtioniert.</p>
<p>Ich muss die Objecte mittels new anlegen weil ich sie auch außerhalb des definierten Bereichs brauche.<br />
Diese Objecte sollen gewisse Zustände speichern und an anderer Stelle verglichen werden.<br />
Die statischen Objecte ohne new erzeugt werden nach verlassen des scopes zerstört obwohl ich sie noch brauche...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179896</guid><dc:creator><![CDATA[DirkS]]></dc:creator><pubDate>Sat, 11 Feb 2012 17:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 18:00:11 GMT]]></title><description><![CDATA[<p>DirkS schrieb:</p>
<blockquote>
<p>Die statischen Objecte ohne new erzeugt werden nach verlassen des scopes zerstört obwohl ich sie noch brauche...</p>
</blockquote>
<p>Nimm wie gezeigt <code>std::unique_ptr</code> , der räumt automatisch auf. Oder Boost.PtrContainer...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179898</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 11 Feb 2012 18:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 18:09:57 GMT]]></title><description><![CDATA[<p>DirkS schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Ne, in diesem Fall holst du dir die Addresse des Iterators!</p>
<pre><code class="language-cpp">delete &amp;(*it);
</code></pre>
<p>Uerst das Objekt holen und dann per Addressoperator die Addresse des Objektes nehmen.</p>
<p>Wäre halbrichtig. Wieso halbrichtig? Weil du kein delete verwenden solltest.<br />
Gibt es einen Grund wieso du die Objekte per new anlegst? Wenn es denn gibt, mann mach lieber eine std::list&lt;std::unique_ptr&lt;MyObject&gt;&gt;.</p>
</blockquote>
<p>Danke für die Hilfe, hat funtioniert.</p>
<p>Ich muss die Objecte mittels new anlegen weil ich sie auch außerhalb des definierten Bereichs brauche.<br />
Diese Objecte sollen gewisse Zustände speichern und an anderer Stelle verglichen werden.<br />
Die statischen Objecte ohne new erzeugt werden nach verlassen des scopes zerstört obwohl ich sie noch brauche...</p>
</blockquote>
<p>Die Objekte in der Liste doch nicht?<br />
Oder sollen die Objekte länger leben als die Liste? Dann wäre das ein Fall für std::shared_ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179902</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sat, 11 Feb 2012 18:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu std::List&amp;lt;&amp;gt; on Sat, 11 Feb 2012 20:03:44 GMT]]></title><description><![CDATA[<p>DirkS schrieb:</p>
<blockquote>
<p>Ich muss die Objecte mittels new anlegen weil ich sie auch außerhalb des definierten Bereichs brauche.<br />
Diese Objecte sollen gewisse Zustände speichern und an anderer Stelle verglichen werden.<br />
Die statischen Objecte ohne new erzeugt werden nach verlassen des scopes zerstört obwohl ich sie noch brauche...</p>
</blockquote>
<p>Ist dir bewusst, dass in der Liste <strong>Kopien</strong> der Objekte gespeichert werden, die so lange wie die Liste leben? Wenn ja: Kannst du die Lebenszeit der Liste verlängern?</p>
<p>Und noch die für std::list typische Frage: Hast du die Performance mal mit std::vector verglichen? Der vector zieht die list häufig ab, obwohl einem tolle Containerentscheidungsbildchen was anderes erzählen wollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179934</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 11 Feb 2012 20:03:44 GMT</pubDate></item></channel></rss>