<?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: Wie funktioniert das?]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>wie funktionieren in C++ die Listen? Ich habe mir was aus dem Internet zusammengestoppelt:</p>
<pre><code class="language-cpp">class MyClass {
public:
// DataClassObj ist eine einfache Klasse mit ein paar Gettern und Settern und ein paar privaten strings.
std::list&lt;DataClassObj&gt; m_lstDataSets;

int AddData(const DataClassObj &amp;oData) {
	m_lstDataSets.push_back(oData);
	return 0;
}

// Diese Methode soll das Element an der Stelle index rauswerfen. Genauer gesagt ein Kopie.
// Wenn es einfacher geht bin ich dankbar, VS6 bietet keine Hilfe zu den Methoden der Liste an.
// Trotzdem bin ich interessiert wie ich von iter zum Listenobjekt komme. Laut Beispiel sollte es so gehen.
DataClassObj GetData(int index) const {
	int counter=0;

	for (list&lt;DataClassObj&gt;::const_iterator iter=m_lstDataSets.begin(); 
		  iter!=m_lstDataSets.end(); 
		  ++iter) {

		counter++;
		if (counter == index) {
			return iter; // Hier der Kompilerfehler.
		}
	}

	//return 0; Was gebe ich zurück wenn kein Element gefunden wurde? Dieses gibt noch mehr Fehler.
}
}
</code></pre>
<p>Das Problem ist &quot;return iter&quot;:</p>
<blockquote>
<p>error C2664: '__thiscall DataClassObj::DataClassObj(const class DataClassObj &amp;)' : cannot convert parameter 1 from 'class std::list&lt;class DataClassObj,class std::allocator&lt;class DataClassObj&gt; &gt;::const_iterator' to 'const class DataClassObj &amp;'<br />
Reason: cannot convert from 'class std::list&lt;class DataClassObj,class std::allocator&lt;class DataClassObj&gt; &gt;::const_iterator' to 'const class DataClassObj'<br />
No constructor could take the source type, or constructor overload resolution was ambiguous</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/topic/189174/list-wie-funktioniert-das</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 08:18:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189174.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Aug 2007 11:12:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to List: Wie funktioniert das? on Thu, 09 Aug 2007 11:12:47 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>wie funktionieren in C++ die Listen? Ich habe mir was aus dem Internet zusammengestoppelt:</p>
<pre><code class="language-cpp">class MyClass {
public:
// DataClassObj ist eine einfache Klasse mit ein paar Gettern und Settern und ein paar privaten strings.
std::list&lt;DataClassObj&gt; m_lstDataSets;

int AddData(const DataClassObj &amp;oData) {
	m_lstDataSets.push_back(oData);
	return 0;
}

// Diese Methode soll das Element an der Stelle index rauswerfen. Genauer gesagt ein Kopie.
// Wenn es einfacher geht bin ich dankbar, VS6 bietet keine Hilfe zu den Methoden der Liste an.
// Trotzdem bin ich interessiert wie ich von iter zum Listenobjekt komme. Laut Beispiel sollte es so gehen.
DataClassObj GetData(int index) const {
	int counter=0;

	for (list&lt;DataClassObj&gt;::const_iterator iter=m_lstDataSets.begin(); 
		  iter!=m_lstDataSets.end(); 
		  ++iter) {

		counter++;
		if (counter == index) {
			return iter; // Hier der Kompilerfehler.
		}
	}

	//return 0; Was gebe ich zurück wenn kein Element gefunden wurde? Dieses gibt noch mehr Fehler.
}
}
</code></pre>
<p>Das Problem ist &quot;return iter&quot;:</p>
<blockquote>
<p>error C2664: '__thiscall DataClassObj::DataClassObj(const class DataClassObj &amp;)' : cannot convert parameter 1 from 'class std::list&lt;class DataClassObj,class std::allocator&lt;class DataClassObj&gt; &gt;::const_iterator' to 'const class DataClassObj &amp;'<br />
Reason: cannot convert from 'class std::list&lt;class DataClassObj,class std::allocator&lt;class DataClassObj&gt; &gt;::const_iterator' to 'const class DataClassObj'<br />
No constructor could take the source type, or constructor overload resolution was ambiguous</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1341419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341419</guid><dc:creator><![CDATA[martinsalo]]></dc:creator><pubDate>Thu, 09 Aug 2007 11:12:47 GMT</pubDate></item><item><title><![CDATA[Reply to List: Wie funktioniert das? on Thu, 09 Aug 2007 11:16:27 GMT]]></title><description><![CDATA[<p>iter ist ein sog. Iterator - ein Zeiger-ähnliches Gebilde, das speziell auf die interne Struktur des Containers (in deinem Fall list&lt;&gt; - eine doppelt verkettete Liste) ausgerichtet ist. Wenn du den Wert, auf den er &quot;zeigt&quot;, zurückgeben willst, mußt du ihn dereferenzieren: 'return *iter;'.</p>
<p>PS: Wenn du häufiger über den Index an ein Listenelement kommen mußt, wären vermutlich vector&lt;&gt; oder deque&lt;&gt; die bessere Wahl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341423</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341423</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 09 Aug 2007 11:16:27 GMT</pubDate></item><item><title><![CDATA[Reply to List: Wie funktioniert das? on Thu, 09 Aug 2007 11:22:29 GMT]]></title><description><![CDATA[<p>Vielen Dank CStoll <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>
<p>Was gebe ich zurück wenn nichts gefunden wurde? Das zweite return ist ja auskommentiert. Was passiert da? Es wird ein Rückgabe erwartet aber nichts zurückgegeben...</p>
<p>In diesem Beispiel bleibt mir wohl nichts übrig als ein leeres DataClassObj zu erstellen und dieses dann zurückzugeben... oder ich gebe einen Pointer zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341429</guid><dc:creator><![CDATA[martinsalo]]></dc:creator><pubDate>Thu, 09 Aug 2007 11:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to List: Wie funktioniert das? on Thu, 09 Aug 2007 11:29:02 GMT]]></title><description><![CDATA[<p>Das mußt du entscheiden - wie oft kommt es denn vor, daß jemand einen nicht vorhandenen list-Eintrag haben möchte? (du könntest einen dummy-Wert zurückgeben - aber eventuell ist es günstiger, eine Expetion zu werfen).</p>
<p>PS: Etwas kompakter als deine Funktion:</p>
<pre><code class="language-cpp">DataClassObj GetData(int index) const {
    if(index&gt;=m_lstDataSets.size()
        throw(out_of_range);//oder andere Fehlerbehandlung
    list&lt;DataClassObj&gt;::const_iterator iter = m_lstDataSets.begin();
    advance(iter,index);
    return *iter;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1341433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341433</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 09 Aug 2007 11:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to List: Wie funktioniert das? on Thu, 09 Aug 2007 12:16:32 GMT]]></title><description><![CDATA[<p>Vielen Dank <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/1341474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341474</guid><dc:creator><![CDATA[martinsalo]]></dc:creator><pubDate>Thu, 09 Aug 2007 12:16:32 GMT</pubDate></item></channel></rss>