<?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[und schon wieder ein iterator Problem von mir]]></title><description><![CDATA[<p>Hi,<br />
langsam hab ich das Gefühl ich geh euch auf den Sack, weil ich ständig mit meinen vectoren und ihren iteratoren nicht klarkomme.<br />
Diesesmal ist wieder ein Iterator 0, der gar nicht 0 sein kann (meiner Meinung nach).</p>
<pre><code class="language-cpp">zahl_pos::zahl_pos(double diezahl, vector&lt;int&gt;::iterator deriterator, vector&lt;int&gt; &amp;dervector)
{
	zahl = diezahl;

	int i = 0;
	for(vector&lt;int&gt;::iterator it = dervector.begin(); it &lt; deriterator; it++)
	{
		i++;
	}

	index = i;
}
</code></pre>
<p>deriterator ist nicht dereferenzierbar, entsprechend schlägt auch der Vergleich fehl (&quot;vector iterators incompatible&quot;).<br />
Aufgerufen wird der Konstruktor in diesem Fall (sonst funzt er ja) so:</p>
<pre><code class="language-cpp">/*...*/zahl_pos(val_of_block, c_rechenablauf.erase(index_zu_it(c_rechenablauf, erste_oeffnend), index_zu_it(c_rechenablauf, passende_schliessend+1)), c_rechenablauf)/*...*/
</code></pre>
<p>deriterator._Mycont ist 0 wie sich im Debugger herausstellte.<br />
deriterator ist aber c_rechenablauf.erase(/<em>...</em>/)<br />
Also müsste _Mycont die Adresse (?) von c_rechenablauf beinhalten.</p>
<p>Ich hoffe mal, dass einer von euch hier besser durchblickt als ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118562/und-schon-wieder-ein-iterator-problem-von-mir</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 11:22:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118562.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Aug 2005 23:56:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to und schon wieder ein iterator Problem von mir on Sun, 21 Aug 2005 23:56:45 GMT]]></title><description><![CDATA[<p>Hi,<br />
langsam hab ich das Gefühl ich geh euch auf den Sack, weil ich ständig mit meinen vectoren und ihren iteratoren nicht klarkomme.<br />
Diesesmal ist wieder ein Iterator 0, der gar nicht 0 sein kann (meiner Meinung nach).</p>
<pre><code class="language-cpp">zahl_pos::zahl_pos(double diezahl, vector&lt;int&gt;::iterator deriterator, vector&lt;int&gt; &amp;dervector)
{
	zahl = diezahl;

	int i = 0;
	for(vector&lt;int&gt;::iterator it = dervector.begin(); it &lt; deriterator; it++)
	{
		i++;
	}

	index = i;
}
</code></pre>
<p>deriterator ist nicht dereferenzierbar, entsprechend schlägt auch der Vergleich fehl (&quot;vector iterators incompatible&quot;).<br />
Aufgerufen wird der Konstruktor in diesem Fall (sonst funzt er ja) so:</p>
<pre><code class="language-cpp">/*...*/zahl_pos(val_of_block, c_rechenablauf.erase(index_zu_it(c_rechenablauf, erste_oeffnend), index_zu_it(c_rechenablauf, passende_schliessend+1)), c_rechenablauf)/*...*/
</code></pre>
<p>deriterator._Mycont ist 0 wie sich im Debugger herausstellte.<br />
deriterator ist aber c_rechenablauf.erase(/<em>...</em>/)<br />
Also müsste _Mycont die Adresse (?) von c_rechenablauf beinhalten.</p>
<p>Ich hoffe mal, dass einer von euch hier besser durchblickt als ich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855752</guid><dc:creator><![CDATA[Ger001]]></dc:creator><pubDate>Sun, 21 Aug 2005 23:56:45 GMT</pubDate></item><item><title><![CDATA[Reply to und schon wieder ein iterator Problem von mir on Mon, 22 Aug 2005 06:39:25 GMT]]></title><description><![CDATA[<p>deriterator kann fehlerhaft sein, weil erase einen Iterator hinter den zu löschenden Bereich zurückgibt. deriterator kann also auf end() liegen und damit ungültig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855795</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 22 Aug 2005 06:39:25 GMT</pubDate></item><item><title><![CDATA[Reply to und schon wieder ein iterator Problem von mir on Mon, 22 Aug 2005 10:16:39 GMT]]></title><description><![CDATA[<p>Hmm ja, jetzt wo ich drüber geschlafen hab komm ich schon eher drauf.</p>
<p>Im Debugger wird mir ein Wert für deriterator angezeigt, dieser ist gleich dem letzten Element vor end(), ich habe dabei aber nicht bedacht, dass der MS Debugger auch den Wert von Pointern anzeigt die ins leere zeigen, wird bei Iteratoren also nicht anders sein.<br />
Ich glaub das nächste mal bevor ich einen Thread eröffne schlafe ich nochmal drüber.</p>
<p>Gelöst hat sich mein Problem trotzdem noch nicht damit, denn wenn ich mal einfach ein Element weniger lösche und deriterator also auf ein früheres Element zeigt, dann kommt der gleiche Fehler.<br />
Ich werd mal sehen, ob ich irgendwie an die Adresse komme, auf die deriterator zeigt.</p>
<p>OK habe jetzt festgestellt, dass deriterator 80 Bytes hinter begin() liegt, jedes Element von dervector ist 16 Byte groß, speziell hier habe ich blos 3 Elemente, somit liegt 32 Byte zu weit hinten (was aber auch nicht end() entspricht glaube ich).</p>
<p>Ich muss mir jetzt wohl irgendwie eine Andere Lösung als erase() überlegen um an meinen Iterator zu kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855941</guid><dc:creator><![CDATA[Ger001]]></dc:creator><pubDate>Mon, 22 Aug 2005 10:16:39 GMT</pubDate></item></channel></rss>