<?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[list stl]]></title><description><![CDATA[<p>Hallo, kann mir jemand sagen warum folgendes nicht funktioniert?<br />
Ich habe eine einfache Klasse ..</p>
<pre><code>class A {
public:
	int i;
	A(int j){i=j;}
};
</code></pre>
<p>.. eine Methode die eine Liste von Referenzen auf A-Klassen konstruiert und einen Pointer auf die Liste zurück gibt ..</p>
<pre><code>list&lt;A*&gt;* test()
{
	list&lt;A*&gt; *l = new list&lt;A*&gt;();
	{
		A a(1);
		cout &lt;&lt; &amp;a &lt;&lt; endl;
		l-&gt;push_back(&amp;a);
	}
	{
		A a(2);
		cout &lt;&lt; &amp;a &lt;&lt; endl;
		l-&gt;push_back(&amp;a);
	}

	cout &lt;&lt; l-&gt;front() &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back() &lt;&lt; endl;

	cout &lt;&lt; l-&gt;front()-&gt;i &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back()-&gt;i &lt;&lt; endl;

	return l;

}
</code></pre>
<p>.. und die Main-Methode.</p>
<pre><code>int _tmain(int argc, _TCHAR* argv[])
{
	list&lt;A*&gt; *l = test();

	cout &lt;&lt; l-&gt;front() &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back() &lt;&lt; endl;

	cout &lt;&lt; l-&gt;front()-&gt;i &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back()-&gt;i &lt;&lt; endl;

	pause();
	return 0;
}
</code></pre>
<p>Das für mich Unverständliche: Innerhalb der Methode werden die Membervariablen richtig ausgelesen (i = 1 bzw. 2). Außerhalb stimmen zwar alle Referenzen überein, aber der Wert der Membervariablen ist ein völlig anderer. Beispiel für eine Ausgabe:</p>
<p>0012FD10<br />
0012FD0C<br />
0012FD10<br />
0012FD0C<br />
1<br />
2<br />
0012FD10<br />
0012FD0C<br />
3510704<br />
3510768</p>
<p>Kann jemand nachvollziehen was da passiert? Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/211415/list-stl</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 06:26:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211415.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 22 Apr 2008 21:57:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to list stl on Tue, 22 Apr 2008 21:57:43 GMT]]></title><description><![CDATA[<p>Hallo, kann mir jemand sagen warum folgendes nicht funktioniert?<br />
Ich habe eine einfache Klasse ..</p>
<pre><code>class A {
public:
	int i;
	A(int j){i=j;}
};
</code></pre>
<p>.. eine Methode die eine Liste von Referenzen auf A-Klassen konstruiert und einen Pointer auf die Liste zurück gibt ..</p>
<pre><code>list&lt;A*&gt;* test()
{
	list&lt;A*&gt; *l = new list&lt;A*&gt;();
	{
		A a(1);
		cout &lt;&lt; &amp;a &lt;&lt; endl;
		l-&gt;push_back(&amp;a);
	}
	{
		A a(2);
		cout &lt;&lt; &amp;a &lt;&lt; endl;
		l-&gt;push_back(&amp;a);
	}

	cout &lt;&lt; l-&gt;front() &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back() &lt;&lt; endl;

	cout &lt;&lt; l-&gt;front()-&gt;i &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back()-&gt;i &lt;&lt; endl;

	return l;

}
</code></pre>
<p>.. und die Main-Methode.</p>
<pre><code>int _tmain(int argc, _TCHAR* argv[])
{
	list&lt;A*&gt; *l = test();

	cout &lt;&lt; l-&gt;front() &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back() &lt;&lt; endl;

	cout &lt;&lt; l-&gt;front()-&gt;i &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back()-&gt;i &lt;&lt; endl;

	pause();
	return 0;
}
</code></pre>
<p>Das für mich Unverständliche: Innerhalb der Methode werden die Membervariablen richtig ausgelesen (i = 1 bzw. 2). Außerhalb stimmen zwar alle Referenzen überein, aber der Wert der Membervariablen ist ein völlig anderer. Beispiel für eine Ausgabe:</p>
<p>0012FD10<br />
0012FD0C<br />
0012FD10<br />
0012FD0C<br />
1<br />
2<br />
0012FD10<br />
0012FD0C<br />
3510704<br />
3510768</p>
<p>Kann jemand nachvollziehen was da passiert? Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496516</guid><dc:creator><![CDATA[Gastbenutzer]]></dc:creator><pubDate>Tue, 22 Apr 2008 21:57:43 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Tue, 22 Apr 2008 22:08:11 GMT]]></title><description><![CDATA[<p>du hast überhaupt glück, dass das in der funktion funktioniert.<br />
die beiden As existieren nämlich schon nach der geschweiften klammer nach dem push_back nicht mehr. d.h. du hast zeiger in deiner liste, die auf einen ort zeigen, wo kein objekt liegt.<br />
warum überhaupt zeiger? wenn du alle * und &amp; wegmachst und die -&gt; durch . ersetzt, würde dein code perfekt funktionieren. (und das eine new)</p>
<p>/edit: puh, ich bin tatsächlich etwas erschöpft. ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496522</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Tue, 22 Apr 2008 22:08:11 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 07:13:00 GMT]]></title><description><![CDATA[<p>Na, das ist ja mal ein schönes Beispiel dafür, Heap-Objekte genau an der falschen Stelle einzusetzen. <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="😉"
    /><br />
Ach ja: Bitte cpp-Tags und nicht &quot;code&quot; - macht's uns deutlich einfacher<br />
...</p>
<pre><code class="language-cpp">int main() {
   list&lt;A&gt; List;
   List.push_back(1); // implizite Konvertierung ruft A::A(int) auf
   List.push_back(2);

   cout &lt;&lt; List.front().i &lt;&lt; endl;
   cout &lt;&lt; List.back().i &lt;&lt; endl;
//...
</code></pre>
<p>So einfach kann das Leben in C++ sein ... <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>
<p>&quot;Initfunktionen&quot; (wie bei Dir &quot;test&quot;) sind unüblich und fehleranfällig - kann man (wenn man es braucht) viel besser in einem Konstruktor machen:</p>
<pre><code class="language-cpp">struct myListObject {
   list&lt;A&gt; internList;
   myList() {
      internList.push_back(1); // implizite Konvertierung ruft A::A(int) auf
      internList.push_back(2);
   }
};

int main() {
   myListObject List;

   cout &lt;&lt; List.internList.front().i &lt;&lt; endl;
   cout &lt;&lt; List.internList.back().i &lt;&lt; endl;
//...
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496605</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 23 Apr 2008 07:13:00 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 08:35:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14600">@queer_boy</a><br />
Hmm, eigentlich logisch das die nicht mehr existieren |-)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a><br />
Das sieht zwar wie eine init aus ist aber keine. Es ist nur eine Vereinfachung von Code den ich benutze und der im Grunde so funktionieren soll (Methode die eine Liste von Objekten zurückgibt).</p>
<p>Danke euch beiden schonmal. Hier jetzt der neue Code. Was ich jetzt noch nicht verstehe ist wie ich die anderen '-&gt;' und das 'new' wegmachen soll. Mir ist klar, dass ich die Liste einfach mit list&lt;A&gt; l; deklarieren kann. Aber wenn ich das richtig verstanden habe, ist die Liste futsch sobald ich aus der Methode zurückkehre (und nur einen Pointer zurückgebe). Also ist doch 'new' die einzige Alternative oder?</p>
<pre><code class="language-cpp">class A {
public:
	int i;
	A(int j){i=j;}
};

list&lt;A&gt;* test()
{
	list&lt;A&gt; *l = new list&lt;A&gt;();
	{
		A a(1);
		l-&gt;push_back(a);
	}
	{
		A a(2);
		l-&gt;push_back(a);
	}

	cout &lt;&lt; l-&gt;front().i &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back().i &lt;&lt; endl;

	return l;

}

/* Main-Methode */
int _tmain(int argc, _TCHAR* argv[])
{
	list&lt;A&gt; *l = test();

	cout &lt;&lt; l-&gt;front().i &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back().i &lt;&lt; endl;

	pause();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1496644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496644</guid><dc:creator><![CDATA[Gastbenutzer]]></dc:creator><pubDate>Wed, 23 Apr 2008 08:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 08:37:47 GMT]]></title><description><![CDATA[<p>bzw.</p>
<pre><code class="language-cpp">list&lt;A&gt;* test()
{
	list&lt;A&gt; *l = new list&lt;A&gt;();

	l-&gt;push_back(1);
	l-&gt;push_back(2);

	cout &lt;&lt; l-&gt;front().i &lt;&lt; endl;
	cout &lt;&lt; l-&gt;back().i &lt;&lt; endl;

	return l;

}
</code></pre>
<p>mit impliziter Konvertierung. Nettes Feature <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496646</guid><dc:creator><![CDATA[Gastbenutzer]]></dc:creator><pubDate>Wed, 23 Apr 2008 08:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 12:20:21 GMT]]></title><description><![CDATA[<p>Es würde z.Bsp. auch gehen indem du test eine Referenz auf deine List übergibst.</p>
<pre><code class="language-cpp">void test(list&lt;A&gt;&amp; l)
{
    l.push_back(A(1));
    l.push_back(A(2));
    cout &lt;&lt; l.front().i &lt;&lt; endl;
    cout &lt;&lt; l.back().i &lt;&lt; endl;
}

/* Main-Methode */
int _tmain(int argc, _TCHAR* argv[])
{
    list&lt;A&gt; l;
    test(l);   
    cout &lt;&lt; l.front().i &lt;&lt; endl;
    cout &lt;&lt; l.back().i &lt;&lt; endl;

    pause();
    return 0;
}
</code></pre>
<p>[edit]Pfeile wegeditiert <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="🙂"
    /> [edit]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496648</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 23 Apr 2008 12:20:21 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 08:43:07 GMT]]></title><description><![CDATA[<p>Bitte keine Kopierphobien entwickeln <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>
<pre><code class="language-cpp">class A { 
public: 
    int i; 
    A(int j){i=j;} 
}; 

list&lt;A&gt; test() 
{ 
    list&lt;A&gt; l; 
    l.push_back( A(1) ); 
    l.push_back( A(2) ); 

    cout &lt;&lt; l.front().i &lt;&lt; endl; 
    cout &lt;&lt; l.back().i &lt;&lt; endl; 

    return l; 
} 

/* Main-Methode */ 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    list&lt;A&gt; l = test(); 

    cout &lt;&lt; l.front().i &lt;&lt; endl; 
    cout &lt;&lt; l.back().i &lt;&lt; endl; 

    pause(); 
    return 0; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1496651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496651</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 23 Apr 2008 08:43:07 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 11:08:45 GMT]]></title><description><![CDATA[<p>Gastbenutzer schrieb:</p>
<blockquote>
<p>...<br />
...Aber wenn ich das richtig verstanden habe, ist die Liste futsch sobald ich aus der Methode zurückkehre (und nur einen Pointer zurückgebe). Also ist doch 'new' die einzige Alternative oder?...</p>
</blockquote>
<p>Nö,</p>
<p>ich würde solche &quot;Erzeugerfunktionen&quot; komplett meiden. Hat man nur Ärger mit.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496744</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 23 Apr 2008 11:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 11:04:20 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Es würde z.Bsp. auch gehen indem du test eine Referenz auf deine List übergibst....</p>
</blockquote>
<p>Mach doch mal eben die versehentlich kopierten Pfeilchen weg... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496747</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 23 Apr 2008 11:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 12:20:49 GMT]]></title><description><![CDATA[<p>Erledigt. <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496814</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 23 Apr 2008 12:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 13:16:34 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>ich würde solche &quot;Erzeugerfunktionen&quot; komplett meiden. Hat man nur Ärger mit.</p>
</blockquote>
<p>factory method? in diesem fall wissen wir doch gar nicht genau, was der OP vorhat.</p>
<p>OP schrieb:</p>
<blockquote>
<p>Aber wenn ich das richtig verstanden habe, ist die Liste futsch sobald ich aus der Methode zurückkehre (und nur einen Pointer zurückgebe). Also ist doch 'new' die einzige Alternative oder?</p>
</blockquote>
<p>ja, die liste ist weg, wenn du sie einfach so aus der funktion zurückgibst (per value, s.o. LordJaxoms posting). aber eine kopie wird erzeugt (inklusive kopien der objekte, die in der liste sind), diese kannst du dann weiter verwenden.</p>
<p>moderne compiler sind außerdem so schlau, dass sie auf die kopie verzichten (und das meinte IMO auch LordJaxom mit &quot;keine kopierphobie&quot;). stichwort dazu: (named) return value optimization.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496857</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 23 Apr 2008 13:16:34 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 13:05:43 GMT]]></title><description><![CDATA[<p>queer_boy schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Aber wenn ich das richtig verstanden habe, ist die Liste futsch sobald ich aus der Methode zurückkehre (und nur einen Pointer zurückgebe). Also ist doch 'new' die einzige Alternative oder?</p>
</blockquote>
<p>...</p>
</blockquote>
<p>Das habe ich nicht gesagt !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Braunstein schrieb:</p>
<blockquote>
<p>Erledigt. <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="🙂"
    /></p>
</blockquote>
<p>Danke !</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496860</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 23 Apr 2008 13:05:43 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 13:17:26 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Das habe ich nicht gesagt !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>passiert heute wohl allen mal ^^.<br />
aber interessanterweise habe ich auch dich zitiert und etwas dazugeschrieben, das nicht mehr da war... wie auch immer, ist korrigiert <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496876</guid><dc:creator><![CDATA[queer_boy]]></dc:creator><pubDate>Wed, 23 Apr 2008 13:17:26 GMT</pubDate></item><item><title><![CDATA[Reply to list stl on Wed, 23 Apr 2008 13:30:55 GMT]]></title><description><![CDATA[<p>Sehr schön <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Danke für die Hinweise. Die Copy-Phobie trifft glaube ein wenig auf mich zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1496895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1496895</guid><dc:creator><![CDATA[Gastbenutzer]]></dc:creator><pubDate>Wed, 23 Apr 2008 13:30:55 GMT</pubDate></item></channel></rss>