<?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[Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen]]></title><description><![CDATA[<p>Hallo ihr Profis,</p>
<p>ich habe ein Problem mit selbst erstellten Klassen.</p>
<p>Ich muss über eingene Klassen Objekte erstellen. Diese müssen in einem Vector gespeichert werden. Da sie dazu kopiert werden, muss ein Copy-Constructor eingesetzt werden. so weit- so gut. Die .h-Datei sieht in etwa folgendermassen aus:</p>
<pre><code class="language-cpp">class CMetricObjects : public CObject
{

public:
	CMetricObjects();
	CMetricObjects(int x, int y);	//Konstruktor für Punkte
	CMetricObjects(const CMetricObjects&amp; cmo); 	  // Copy constructor

	virtual ~CMetricObjects();

	  // Assignment operator
	CMetricObjects&amp; operator=(const CMetricObjects&amp; )
	{
		return *this;
	};

//protected:
	CPen pen;
	CBrush brush;
	CPoint StartPoint;
	CPoint EndPoint;
	CString typ;
};
</code></pre>
<p>Die .cpp-Datei sieht in Ausschnitten so aus:</p>
<pre><code class="language-cpp">#include &quot;MetricObjects.h&quot;

[...]

//Konstruktor für Punkte
CMetricObjects::CMetricObjects(int x, int y)
{
	typ = &quot;Punkt&quot;;

	pen.CreatePen(PS_SOLID, 2, RGB(255,0,0));

	StartPoint.x = x - 10;
	StartPoint.y = y + 10;

	EndPoint.x = x + 10;
	EndPoint.y = y + 10;

}

[...]

// Copy constructor
CMetricObjects::CMetricObjects(const CMetricObjects&amp; cmo)
{
	EXTLOGPEN extlogpen;

	cmo.pen.GetExtLogPen(&amp;extlogpen);

	pen.CreatePen(extlogpen.elpPenStyle, extlogpen.elpWidth, extlogpen.elpColor);

	StartPoint.x = cmo.StartPoint.x;
	StartPoint.y = cmo.StartPoint.y;

	EndPoint.x = cmo.EndPoint.x;
	EndPoint.y = cmo.EndPoint.y;
}
</code></pre>
<p>Die Punkte aus dem kopierten Objekt cmo auszulesen ist überhaupt kein Problem.<br />
Wenn ich den Pen mittels GetExtLogPen(...) auslesen will kommt folgende Fehlermeldung:</p>
<pre><code>e:\Dateien\c++\VS.NET\Metric\MetricObjects.cpp(57): error C2662: 'CPen::GetExtLogPen': this-Zeiger kann nicht von 'const CPen' in 'CPen &amp;' konvertiert werden
</code></pre>
<p>Kann mir jemand helfen, ich muss dringend den Pen übergeben, damit die Objekt in der dem entsprechenden Farbe gezeichnet werden können.<br />
Das gleiche Problem wird sich ja mit dem Brush ergeben.</p>
<p>Dank schon im Voraus.</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/75567/eigene-objekte-copy-konstruktoren-und-ihre-komplikationen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 06:34:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/75567.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Jun 2004 07:29:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Wed, 02 Jun 2004 07:29:17 GMT]]></title><description><![CDATA[<p>Hallo ihr Profis,</p>
<p>ich habe ein Problem mit selbst erstellten Klassen.</p>
<p>Ich muss über eingene Klassen Objekte erstellen. Diese müssen in einem Vector gespeichert werden. Da sie dazu kopiert werden, muss ein Copy-Constructor eingesetzt werden. so weit- so gut. Die .h-Datei sieht in etwa folgendermassen aus:</p>
<pre><code class="language-cpp">class CMetricObjects : public CObject
{

public:
	CMetricObjects();
	CMetricObjects(int x, int y);	//Konstruktor für Punkte
	CMetricObjects(const CMetricObjects&amp; cmo); 	  // Copy constructor

	virtual ~CMetricObjects();

	  // Assignment operator
	CMetricObjects&amp; operator=(const CMetricObjects&amp; )
	{
		return *this;
	};

//protected:
	CPen pen;
	CBrush brush;
	CPoint StartPoint;
	CPoint EndPoint;
	CString typ;
};
</code></pre>
<p>Die .cpp-Datei sieht in Ausschnitten so aus:</p>
<pre><code class="language-cpp">#include &quot;MetricObjects.h&quot;

[...]

//Konstruktor für Punkte
CMetricObjects::CMetricObjects(int x, int y)
{
	typ = &quot;Punkt&quot;;

	pen.CreatePen(PS_SOLID, 2, RGB(255,0,0));

	StartPoint.x = x - 10;
	StartPoint.y = y + 10;

	EndPoint.x = x + 10;
	EndPoint.y = y + 10;

}

[...]

// Copy constructor
CMetricObjects::CMetricObjects(const CMetricObjects&amp; cmo)
{
	EXTLOGPEN extlogpen;

	cmo.pen.GetExtLogPen(&amp;extlogpen);

	pen.CreatePen(extlogpen.elpPenStyle, extlogpen.elpWidth, extlogpen.elpColor);

	StartPoint.x = cmo.StartPoint.x;
	StartPoint.y = cmo.StartPoint.y;

	EndPoint.x = cmo.EndPoint.x;
	EndPoint.y = cmo.EndPoint.y;
}
</code></pre>
<p>Die Punkte aus dem kopierten Objekt cmo auszulesen ist überhaupt kein Problem.<br />
Wenn ich den Pen mittels GetExtLogPen(...) auslesen will kommt folgende Fehlermeldung:</p>
<pre><code>e:\Dateien\c++\VS.NET\Metric\MetricObjects.cpp(57): error C2662: 'CPen::GetExtLogPen': this-Zeiger kann nicht von 'const CPen' in 'CPen &amp;' konvertiert werden
</code></pre>
<p>Kann mir jemand helfen, ich muss dringend den Pen übergeben, damit die Objekt in der dem entsprechenden Farbe gezeichnet werden können.<br />
Das gleiche Problem wird sich ja mit dem Brush ergeben.</p>
<p>Dank schon im Voraus.</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/531371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/531371</guid><dc:creator><![CDATA[christianm_ghc]]></dc:creator><pubDate>Wed, 02 Jun 2004 07:29:17 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Wed, 02 Jun 2004 13:38:47 GMT]]></title><description><![CDATA[<p>hast du hier mit der methodenliste gearbeitet wo du das</p>
<p>cmd.pen.getextlogpen()<br />
geschrieben hast?</p>
<p>kann es sein du musst ein -&gt; verwenden??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/531643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/531643</guid><dc:creator><![CDATA[miss c++]]></dc:creator><pubDate>Wed, 02 Jun 2004 13:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Wed, 02 Jun 2004 18:20:11 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>ja. da ich unter <a href="http://VS.NET" rel="nofollow">VS.NET</a> 2003 arbeite, kommt ja die intellisense-db zum einsatz.<br />
diese bringt mir auch die codecompletion und bietet mir die funktion an.</p>
<p>mit -&gt; geht gar nix.<br />
da bringt gleich die intellisense einen fehler und wenn ich's kompilieren will, kommen auch fehler, die ich aber jetzt nicht aufschreiben kann, da ich nicht mehr auf der arbeit bin.</p>
<p>mfg<br />
christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/531882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/531882</guid><dc:creator><![CDATA[christianm_ghc]]></dc:creator><pubDate>Wed, 02 Jun 2004 18:20:11 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Thu, 03 Jun 2004 10:31:11 GMT]]></title><description><![CDATA[<p>Welche Zeile ist denn die 57?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/532210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/532210</guid><dc:creator><![CDATA[Sascha78]]></dc:creator><pubDate>Thu, 03 Jun 2004 10:31:11 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Thu, 03 Jun 2004 11:01:56 GMT]]></title><description><![CDATA[<p>eben jene mit:</p>
<p>cmo.pen.GetExtLogPen(&amp;extlogpen);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/532228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/532228</guid><dc:creator><![CDATA[christianm_ghc]]></dc:creator><pubDate>Thu, 03 Jun 2004 11:01:56 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Thu, 03 Jun 2004 11:12:14 GMT]]></title><description><![CDATA[<blockquote>
<p>MSDN:</p>
<p>Compiler-Fehler C2662<br />
'Funktion' : 'this'-Zeiger kann nicht von 'Typ1' in 'Typ2' konvertiert werden</p>
<p>Der Compiler konnte den Zeiger this nicht von Typ1 in Typ2 konvertieren.</p>
<p>Dieser Fehler wird möglicherweise dadurch hervorgerufen, daß eine Member-Funktion (die nicht const ist) auf einem Objekt (das const ist) aufgerufen wird. Um dieses Problem zu beheben, entfernen Sie const aus der Objektdeklaration, oder fügen Sie const zu einer Member-Funktion hinzu.</p>
<p>Ein Beispiel für diesen Fehler:</p>
<p>class C<br />
{<br />
public:<br />
void func1();<br />
void func2() const;<br />
} const c;</p>
<p>void main()<br />
{<br />
c.func1(); // Fehler<br />
c.func2(); // Kein Fehler<br />
}</p>
</blockquote>
<p>Lass doch mal das const in der Deklaration und bei der Implementierung des Copykonstruktors weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/532238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/532238</guid><dc:creator><![CDATA[Sascha78]]></dc:creator><pubDate>Thu, 03 Jun 2004 11:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Thu, 03 Jun 2004 11:40:32 GMT]]></title><description><![CDATA[<p>tja, leider erkennt er dann den Copy-Konstruktor nicht mehr.<br />
dieser benötigt dringend den const.</p>
<p>Es kommt folgende Fehlermeldung:</p>
<p>d:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\vector(810): error C2558: class 'CMetricObjects': Kein Kopierkonstruktor verfügbar oder der Kopierkonstruktor is als 'explicit' deklariert</p>
<p>kurioserweise wird zeile 810 der vector - datei angeführt. dort befindet sich die funktion:<br />
void _Insert_n(iterator _Where, size_type _Count, const _Ty&amp; _Val)<br />
{<br />
_Ty _Tmp = _Val; // &lt;- ist Zeile 810</p>
<p>[...]<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/532262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/532262</guid><dc:creator><![CDATA[christianm_ghc]]></dc:creator><pubDate>Thu, 03 Jun 2004 11:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Thu, 03 Jun 2004 21:16:27 GMT]]></title><description><![CDATA[<p>Jaja, das übliche MFC-Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Da CPen::GetExtLogPen (leider) nicht als const markiert ist (obwohl sie eigentlich nur liest und nichts an dem CPen verändert), kannst du die Funktion nicht ohne Weiteres verwenden.<br />
Entweder, du machst erst einen const_cast, um das const von cmo zu entfernen, oder du nimmst ::GetObject(cmo.pen.m_hPen, sizeof(LOGPEN), &amp;mylogpen).<br />
Dass der Compiler den Fehler an einer so komischen Stelle meldet liegt einfach daran, dass das die Stelle ist, an der er den Copy-CTor aufruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/532717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/532717</guid><dc:creator><![CDATA[tag]]></dc:creator><pubDate>Thu, 03 Jun 2004 21:16:27 GMT</pubDate></item><item><title><![CDATA[Reply to Eigene Objekte, Copy-Konstruktoren und ihre Komplikationen on Fri, 04 Jun 2004 07:32:25 GMT]]></title><description><![CDATA[<p>einfach nur genial !!! <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>Vielen Dank. Ich habe es dann mit dem zweiten Weg (GetObject) gemacht und das funktioniert hervorrangend.</p>
<p>Nochmals herzlichen Dank !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/532866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/532866</guid><dc:creator><![CDATA[christianm_ghc]]></dc:creator><pubDate>Fri, 04 Jun 2004 07:32:25 GMT</pubDate></item></channel></rss>