<?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[Debug Assertion Failed...invalid operator &amp;gt;]]></title><description><![CDATA[<p>Hi,<br />
erstmal bisl code der hoffentlich ausreicht...</p>
<pre><code class="language-cpp">class Position
{
public:
	int x,y,z;

	Position(){}
	Position(int x, int y, int z){
		this-&gt;x = x;
		this-&gt;y = y;
		this-&gt;z = z;

	bool operator &lt; (const Position &amp;pos) const{
		if(pos.x &gt; x || pos.y &gt; y || pos.z &gt; z)
			return true;
		return false;
	}

};

class World{
private:
	map&lt;Position ,WorldPoint&gt; point;
...
};

World::World(){
	this-&gt;cell = new Cell(this);
	srand ( time(NULL) );

	for(int i = 0; i &lt; 10; ++i){ // diese schleife mein ich
		int x = rand() % 30;
		int y = rand() % 30;
		int z = rand() % 30;
		Position pos(x,y,z);

		if(point.count(pos) &gt; 0)
			continue;

		point[pos].cell = (this-&gt;cell);
		point[pos].options = 0;

	}
}
</code></pre>
<p>Beim Zweiten durchlauf der Schleife bekomm ich folgenen Debug Fehler:</p>
<p>Debug Assertion Failed!<br />
...<br />
Expression: invalid operator&lt;<br />
...</p>
<p>weiß einer woran das liegen könnte? Ist dem Map-Type der operator &lt; nicht eindeutig genug? Oder sind es zu wenig informationen um den Grund herrauszufinden?</p>
<p>Mfg Landau <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/topic/260502/debug-assertion-failed-invalid-operator-gt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 01:32:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/260502.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Feb 2010 00:37:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Debug Assertion Failed...invalid operator &amp;gt; on Sat, 06 Feb 2010 00:37:21 GMT]]></title><description><![CDATA[<p>Hi,<br />
erstmal bisl code der hoffentlich ausreicht...</p>
<pre><code class="language-cpp">class Position
{
public:
	int x,y,z;

	Position(){}
	Position(int x, int y, int z){
		this-&gt;x = x;
		this-&gt;y = y;
		this-&gt;z = z;

	bool operator &lt; (const Position &amp;pos) const{
		if(pos.x &gt; x || pos.y &gt; y || pos.z &gt; z)
			return true;
		return false;
	}

};

class World{
private:
	map&lt;Position ,WorldPoint&gt; point;
...
};

World::World(){
	this-&gt;cell = new Cell(this);
	srand ( time(NULL) );

	for(int i = 0; i &lt; 10; ++i){ // diese schleife mein ich
		int x = rand() % 30;
		int y = rand() % 30;
		int z = rand() % 30;
		Position pos(x,y,z);

		if(point.count(pos) &gt; 0)
			continue;

		point[pos].cell = (this-&gt;cell);
		point[pos].options = 0;

	}
}
</code></pre>
<p>Beim Zweiten durchlauf der Schleife bekomm ich folgenen Debug Fehler:</p>
<p>Debug Assertion Failed!<br />
...<br />
Expression: invalid operator&lt;<br />
...</p>
<p>weiß einer woran das liegen könnte? Ist dem Map-Type der operator &lt; nicht eindeutig genug? Oder sind es zu wenig informationen um den Grund herrauszufinden?</p>
<p>Mfg Landau <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/1851262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1851262</guid><dc:creator><![CDATA[Landau]]></dc:creator><pubDate>Sat, 06 Feb 2010 00:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion Failed...invalid operator &amp;gt; on Sat, 06 Feb 2010 00:48:06 GMT]]></title><description><![CDATA[<p>Er erfüllt die Bedingungen für <em>Strict Weak Ordering</em> nicht, nach dem alle Elemente eindeutig geordnet werden können.</p>
<pre><code class="language-cpp">Position(1,1,3) &lt; Position(1,2,1) == true
Position(1,2,1) &lt; Position(1,1,3) == true
</code></pre>
<p>Nimm ausserdem keinen Vergleichsoperator. Überlade Operatoren nur, wenn ihre Semantik intuitiv ist. Das ist bei 3D-Vektoren definitiv nicht der Fall (&quot;wann ist eine Position grösser als eine andere&quot; wird von 10 Leuten auf 7 unterschiedliche Arten beantwortet). Schreib dir also einen globalen Funktor, und überlege dir ein eindeutiges Sortierkriterium.</p>
<pre><code class="language-cpp">struct ComparePosition
{
    bool operator() (const Position&amp; Left, const Position&amp; Right) const;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1851264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1851264</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Feb 2010 00:48:06 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion Failed...invalid operator &amp;gt; on Sat, 06 Feb 2010 01:19:43 GMT]]></title><description><![CDATA[<p>hier mal ein funktionierender vergleichsoperator:</p>
<pre><code class="language-cpp">struct vector_comparer
{
  bool operator() (const Position&amp; lhs, const Position&amp; rhs) const
  {
    if(lhs.x != rhs.x)
      return lhs.x &lt; rhs.x;

    if(lhs.y != rhs.y)
      return lhs.y &lt; rhs.y;

    return lhs.z &lt; rhs.z;
  }
};
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1851271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1851271</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 06 Feb 2010 01:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion Failed...invalid operator &amp;gt; on Sat, 06 Feb 2010 11:52:19 GMT]]></title><description><![CDATA[<p>Deinen def-ctor kannste in die Tonne treten, weil er &quot;leer&quot; ist und nichtmal die 3D-Koordinaten initialisiert. Und dann solltest du nicht den Weg über den this-Zeiger nehmen. Klopp nen bisschen Design rein und nenn die Koord. m_x, m_y und m_z. Dann kannste die auch direkt in der Initialisierungsliste des ctors initialisieren.</p>
<p>Und naja, wie schon gesagt wurde, so wie du den &lt;-Operator überladen hast, bringt er dir überhaupt nichts im 3D-Raum. Ansonsten könnteste zur Verschönerung noch von Boost::Operators erben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1851328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1851328</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Sat, 06 Feb 2010 11:52:19 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion Failed...invalid operator &amp;gt; on Sat, 06 Feb 2010 12:39:26 GMT]]></title><description><![CDATA[<p>Kóyaánasqatsi schrieb:</p>
<blockquote>
<p>Deinen def-ctor kannste in die Tonne treten, weil er &quot;leer&quot; ist und nichtmal die 3D-Koordinaten initialisiert.</p>
</blockquote>
<p>Die Aussage willst du vielleicht nochmal überdenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1851358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1851358</guid><dc:creator><![CDATA[HurgaHurga]]></dc:creator><pubDate>Sat, 06 Feb 2010 12:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion Failed...invalid operator &amp;gt; on Sat, 06 Feb 2010 13:13:57 GMT]]></title><description><![CDATA[<p>Der Standardkonstruktor sollte die Koordinaten schon initialisieren, z.B. als Nullvektor. Vielleicht ist es nicht die schlechteste Idee, gar nicht erst einen Standardkonstruktor bereitzustellen. Sowas wie <code>m_x</code> würde ich dennoch nicht verwenden, weil es den Code hässlich macht:</p>
<pre><code class="language-cpp">pos.m_x = 4;
</code></pre>
<p>Ist auch gar kein Problem, in der Initialisierungliste Member zu initialisieren, die gleich wie Parameter heissen.</p>
<pre><code class="language-cpp">Position(int x, int y, int z) : x(x), y(y), z(z)
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1851382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1851382</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Feb 2010 13:13:57 GMT</pubDate></item></channel></rss>