<?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[Probleme mit const]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann mir von Euch jemand sagen, warum folgender Code nicht funktioniert?!</p>
<pre><code class="language-cpp">double calculateSlope(const Point* const p1, const Point* const p2)
{
	double retVal = 0;
	double divisor = p2-&gt;GetU() - p1-&gt;GetU();

	if (divisor == 0)
	{
		if (p2-&gt;GetV() &gt;= p1-&gt;GetV())
		{
			retVal = numeric_limits&lt;double&gt;::infinity();
		}
		else
		{
			retVal = -1 * numeric_limits&lt;double&gt;::infinity();
		}
	}
	else
	{
		retVal = (p2-&gt;GetV() - p1-&gt;GetV()) / divisor;
	}

	return retVal;
}
</code></pre>
<p>Point-Datenstruktur:</p>
<pre><code class="language-cpp">#ifndef POINT_H
#define POINT_H

class Point
{
public:
	Point(int index, double x, double y, double z, double u, double v) : index(index), x(x), y(y), z(z), u(u), v(v), n0(NULL), n1(NULL) { }
	int GetIndex() { return index; }
	double GetX() { return x; }
	double GetY() { return y; }
	double GetZ() { return z; }
	double GetU() { return u; }
	double GetV() { return v; }
	Point* GetN0() { return n0; }
	void SetN0(Point* n0) { this-&gt;n0 = n0; }
	Point* GetN1() { return n1; }
	void SetN1(Point* n1) { this-&gt;n1 = n1; }
private:
	int index;
	double x;
	double y;
	double z;
	double u;
	double v;
	Point* n0;
	Point* n1;
};

#endif
</code></pre>
<p>Fehlermeldung beim Compilieren:<br />
error C2662: 'Point::GetU': this-Zeiger kann nicht von 'const Point' in 'Point &amp;' konvertiert werden<br />
Durch die Konvertierung gehen Qualifizierer verloren</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179175/probleme-mit-const</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 02:45:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179175.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 Apr 2007 08:10:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 08:10:50 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann mir von Euch jemand sagen, warum folgender Code nicht funktioniert?!</p>
<pre><code class="language-cpp">double calculateSlope(const Point* const p1, const Point* const p2)
{
	double retVal = 0;
	double divisor = p2-&gt;GetU() - p1-&gt;GetU();

	if (divisor == 0)
	{
		if (p2-&gt;GetV() &gt;= p1-&gt;GetV())
		{
			retVal = numeric_limits&lt;double&gt;::infinity();
		}
		else
		{
			retVal = -1 * numeric_limits&lt;double&gt;::infinity();
		}
	}
	else
	{
		retVal = (p2-&gt;GetV() - p1-&gt;GetV()) / divisor;
	}

	return retVal;
}
</code></pre>
<p>Point-Datenstruktur:</p>
<pre><code class="language-cpp">#ifndef POINT_H
#define POINT_H

class Point
{
public:
	Point(int index, double x, double y, double z, double u, double v) : index(index), x(x), y(y), z(z), u(u), v(v), n0(NULL), n1(NULL) { }
	int GetIndex() { return index; }
	double GetX() { return x; }
	double GetY() { return y; }
	double GetZ() { return z; }
	double GetU() { return u; }
	double GetV() { return v; }
	Point* GetN0() { return n0; }
	void SetN0(Point* n0) { this-&gt;n0 = n0; }
	Point* GetN1() { return n1; }
	void SetN1(Point* n1) { this-&gt;n1 = n1; }
private:
	int index;
	double x;
	double y;
	double z;
	double u;
	double v;
	Point* n0;
	Point* n1;
};

#endif
</code></pre>
<p>Fehlermeldung beim Compilieren:<br />
error C2662: 'Point::GetU': this-Zeiger kann nicht von 'const Point' in 'Point &amp;' konvertiert werden<br />
Durch die Konvertierung gehen Qualifizierer verloren</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1268984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268984</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Thu, 19 Apr 2007 08:10:50 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 08:14:47 GMT]]></title><description><![CDATA[<p>Du mußt die ganzen Getter-Methoden als const deklarieren, damit sie auch für konstante Point-Objekte genutzt werden können (die Funktion calculateSlope() arbeitet mit <em>konstanten</em> Objekten):</p>
<pre><code class="language-cpp">class Point
{
public:
    Point(int index, double x, double y, double z, double u, double v) : index(index), x(x), y(y), z(z), u(u), v(v), n0(NULL), n1(NULL) { }
    int GetIndex() /*hier:*/const
    { return index; }
    ...
};
</code></pre>
<p>PS: hast du mal darüber nachgedacht, die Point's per Referenz zu übergeben:</p>
<pre><code class="language-cpp">double calculateSlope(const Point&amp; p1, const Point&amp; p2);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1268991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1268991</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 19 Apr 2007 08:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 08:49:17 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort. Ich habe schon davon gelesen, dass man besser Referenzen anstelle von Pointer nutzen sollte, allerdings ist mir bisher noch nicht ganz klar warum. Was ist der Vorteil Deines PS?</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269011</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Thu, 19 Apr 2007 08:49:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 08:57:26 GMT]]></title><description><![CDATA[<p>1. Es ist wesentlich schwieriger, etwas ungültiges zu übergeben, da Du ein Objekt zum übergeben brauchst statt eines Zeigers. Zeiger können schneller mal NULL oder ungültig belegt sein.<br />
2. Du musst weniger mit dem Sternchen rumhantieren <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="😉"
    /> EDIT: Und Pfeilchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269014</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 19 Apr 2007 08:57:26 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 08:53:05 GMT]]></title><description><![CDATA[<p>PACoSys schrieb:</p>
<blockquote>
<p>Was ist der Vorteil Deines PS?</p>
</blockquote>
<p>Kürzer zu schreiben, einfacher zu lesen, sicherer (was passiert, wenn du <code>calculateSlope(irgendwas,NULL);</code> aufrufst?),... - such dir etwas aus <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/1269016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269016</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 19 Apr 2007 08:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 09:48:42 GMT]]></title><description><![CDATA[<p>Okay habe es gerafft.</p>
<p>Ein anderes Probleme habe ich noch. Wie müsste man das schreiben?</p>
<pre><code class="language-cpp">void setNextPointAfter(const Point &amp;point, vector&lt;*Point&gt; orderedPoints)
{
}
</code></pre>
<p>In der Funktion soll dem vector ein neuer Eintrag hinzugefügt werden. Der Aufruf erfolgt über:</p>
<pre><code class="language-cpp">setNextPointAfter(*startPoint, orderedPoints);
</code></pre>
<p>wobei orderedPoints ein vector&lt;Point*&gt; ist. Beim Compilieren bekomme ich zwei Fehler:<br />
1. Für den Aufruf der Funktion: error C2664: 'setNextPointAfter': Konvertierung des Parameters 2 von 'std::vector&lt;_Ty&gt;' in 'std::vector' nicht möglich<br />
2. Für die Funktion: error C2275: 'Point': Ungültige Verwendung dieses Typs als Ausdruck</p>
<p>Was ist das Problem?</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269095</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Thu, 19 Apr 2007 09:48:42 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 09:52:40 GMT]]></title><description><![CDATA[<p>Erstens heißt das vector&lt;Point*&gt;.</p>
<p>Zweitens: Was soll diese Funktion eigentlich machen?</p>
<p>Und drittens: vector'en zu kopieren ist aufwendig - den solltest du auch als const-ref übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269099</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 19 Apr 2007 09:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 10:04:22 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Erstens heißt das vector&lt;Point*&gt;.</p>
</blockquote>
<p>Sorry habe ich übersehen.</p>
<p>Die Funktion soll rekursiv aufgerufen werden. Der vector soll zum Schluß die Punkte in einer bestimmten Reihenfolge enthalten. Beginnend bei einem Startpunkt soll in der Funktion immer ein Punkt zu dem vector hinzufügt werden und mit diesem die Funktion neu aufgerufen werden.</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269109</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 10:07:30 GMT]]></title><description><![CDATA[<p>PACoSys schrieb:</p>
<blockquote>
<p>Die Funktion soll rekursiv aufgerufen werden. Der vector soll zum Schluß die Punkte in einer bestimmten Reihenfolge enthalten. Beginnend bei einem Startpunkt soll in der Funktion immer ein Punkt zu dem vector hinzufügt werden und mit diesem die Funktion neu aufgerufen werden.</p>
</blockquote>
<p>Also 'point' ist der Startpunkt und in 'orderedPoints' landen erst seine Nachbarn, dann deren Nachbarn etc, bis die komplette Struktur dort drin steht, richtig? In dem Fall benötigst du sogar eine nicht-konstante Referenz, damit auch das aufrufende Programm etwas davon hat, daß du den vector gefüllt hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269114</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 10:18:43 GMT]]></title><description><![CDATA[<p>Also so:</p>
<pre><code class="language-cpp">void setNextPointAfter(const Point &amp;point, vector&lt;Point*&gt; &amp;orderedPoints){...}
</code></pre>
<p>Sollte man die Referenzen mit einem kleinen r kennzeichnen oder eher wie oben?</p>
<pre><code class="language-cpp">void setNextPointAfter(const Point &amp;rPoint, vector&lt;Point*&gt; &amp;rOrderedPoints){...}
</code></pre>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269120</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:18:43 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit const on Thu, 19 Apr 2007 10:42:16 GMT]]></title><description><![CDATA[<p>Das ist letztendlich egal - mach es so, daß du deinen Quelltext lesen kannst (aber bitte konsequent). Für den Compiler ist beides nur ein Name, den er zur Kenntnis nimmt ohne etwas hineinzudeuten.</p>
<p>(PS: Ich hoffe mal, das endet jetzt nicht in einer Diskussion &quot;Ungarische Notation - Ja oder Nein?&quot;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1269138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1269138</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 19 Apr 2007 10:42:16 GMT</pubDate></item></channel></rss>