<?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[Frage zu den &amp;quot;Großen Drei&amp;quot;]]></title><description><![CDATA[<p>Hallo,</p>
<p>so wie ich das in der FAQ und den Tutorials gelesen habe ist das mit den &quot;Großen Drei&quot; sehr wichtig und ich möchte mich auch daran halten. <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="🙂"
    /><br />
Die Frage die ich im Moment habe ist nur: Brauche ich <em>überhaupt</em> selbst geschriebene oder reichen die Compiler-generierten.</p>
<p>Wenn meine Klasse als Member nur die Typen int, double, std::vector, und NEWMAT::Matrix besitzt, ich also keine Zeiger oder Referenzen als Member habe, muss ich die großen Drei dann selbst erstellen?<br />
(NEWMAT ist eine C++ Matrixbibliothek, <a href="http://www.robertnz.net/nm11.htm" rel="nofollow">http://www.robertnz.net/nm11.htm</a>)</p>
<p>Ich hatte es so verstanden, dass vermieden werden muss, dass Zeiger/Referenzen kopiert werden und die Kopie auf das selbe Objekt/den selben Speicherbereich zeigt wie das Original. Daher muss man die Objekte von Hand umkopieren und braucht dazu die Großen Drei in einer &quot;erweiterten Form&quot;, die der Compiler natürlich nicht automatisch generieren kann.</p>
<p>Danke schonmal<br />
richtigplusplus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221858/frage-zu-den-quot-großen-drei-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 19:36:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221858.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Sep 2008 11:34:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:34:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>so wie ich das in der FAQ und den Tutorials gelesen habe ist das mit den &quot;Großen Drei&quot; sehr wichtig und ich möchte mich auch daran halten. <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="🙂"
    /><br />
Die Frage die ich im Moment habe ist nur: Brauche ich <em>überhaupt</em> selbst geschriebene oder reichen die Compiler-generierten.</p>
<p>Wenn meine Klasse als Member nur die Typen int, double, std::vector, und NEWMAT::Matrix besitzt, ich also keine Zeiger oder Referenzen als Member habe, muss ich die großen Drei dann selbst erstellen?<br />
(NEWMAT ist eine C++ Matrixbibliothek, <a href="http://www.robertnz.net/nm11.htm" rel="nofollow">http://www.robertnz.net/nm11.htm</a>)</p>
<p>Ich hatte es so verstanden, dass vermieden werden muss, dass Zeiger/Referenzen kopiert werden und die Kopie auf das selbe Objekt/den selben Speicherbereich zeigt wie das Original. Daher muss man die Objekte von Hand umkopieren und braucht dazu die Großen Drei in einer &quot;erweiterten Form&quot;, die der Compiler natürlich nicht automatisch generieren kann.</p>
<p>Danke schonmal<br />
richtigplusplus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576403</guid><dc:creator><![CDATA[richtigplusplus]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:38:49 GMT]]></title><description><![CDATA[<p>Ich würde sagen, es kommt immer auf den Anwendungsbereich drauf an, was du programmieren möchtest. Und nach diesen Kriterien solltest du entscheiden, ob deine Klasse(n) selbstgeschriebene brauchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576407</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:39:12 GMT]]></title><description><![CDATA[<p>Die grossen Drei brauchst du hauptsächlich, wenn du tiefe Kopien erstellst. Also eben mit Zeigern und dynamischer Speicherverwaltung. Wenn du alles Objekte hast, reichen die compilergenerierten Kopierkonstruktoren, Destruktoren und Zuweisungsoperatoren.</p>
<p>Wenn man Zeiger mit eigener Speicherverwaltung in der Klasse hat, aber die Klasse gar nie kopieren/zuweisen muss, macht man die entsprechenden Methoden am besten gleich <code>private</code> .</p>
<p>Mit Referenzen oder konstanten Membern muss man aber aufpassen, da diese nicht zugewiesen werden können. Es kann also kein Default-Zuweisungsoperator erstellt werden (was meistens mit einer Warnung mitgeteilt wird).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576408</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:45:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15364">@Firefighter</a>: Das ist mir zu allgemein, das hilft mir leider nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Danke! Das mit den konstanten Membern ist ein guter Hinweis.<br />
Eigentlich geht es mir nämlich um den VC Compilefehler C2248</p>
<blockquote>
<p>C2248: &quot;PointGeneration::propagateTrue3DPoints&quot;: Kein Zugriff auf private Member, dessen Deklaration in der PointGeneration-Klasse erfolgte.</p>
</blockquote>
<p>Meine bisherigen Recherchen haben ergeben, dass es da bei mir vermutlich aufgrund von Compiler-generiertem Code nicht klappt. Daher die Frage nach den Großen Drei.</p>
<p>Mal schauen, ob der Fehler mit den const-Membern zu tun hat.<br />
Falls ja: Kann ich überhaupt Copy-Ctor und operator= haben, wenn manche Member const sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576416</guid><dc:creator><![CDATA[richtigplusplus]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:45:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:47:17 GMT]]></title><description><![CDATA[<p>Du greifst da schlichtweg auf eine Member zu, die Privat ist. Mach sie öffentlich und dann geht es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576425</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:47:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:50:43 GMT]]></title><description><![CDATA[<p>richtigplusplus schrieb:</p>
<blockquote>
<blockquote>
<p>C2248: &quot;PointGeneration::propagateTrue3DPoints&quot;: Kein Zugriff auf private Member, dessen Deklaration in der PointGeneration-Klasse erfolgte.</p>
</blockquote>
<p>Meine bisherigen Recherchen haben ergeben, dass es da bei mir vermutlich aufgrund von Compiler-generiertem Code nicht klappt. Daher die Frage nach den Großen Drei.</p>
<p>Mal schauen, ob der Fehler mit den const-Membern zu tun hat.</p>
</blockquote>
<p>Fehlermeldungen haben nicht umsonst einen Text, der die Art des Fehlers beschreibt. Würdest du diesen lesen, dann wüsstest du, dass es nicht am <code>const</code> liegt...<br />
@ drakon: Er soll lernen, die Fehlermeldungen zu lesen <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>
<p>richtigplusplus schrieb:</p>
<blockquote>
<p>Kann ich überhaupt Copy-Ctor und operator= haben, wenn manche Member const sind?</p>
</blockquote>
<p>Kopierkonstruktor schon, da ja da neue Elemente erzeugt und initialisiert werden. Initialisierung von konstanten Variablen und Referenzen ist erlaubt, Zuweisung hingegen nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576430</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:50:43 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:55:15 GMT]]></title><description><![CDATA[<p>Aber sollte eine Funktion aus PointGeneration, die von einer PointGeneration-Instanz aufgerufen wird nicht sowieso Zugriff auf private Member haben?<br />
Es tritt auch nur bei dieser einen Funktion auf, andere Funktionen aus PointGeneration geben mir diese Meldung nicht.</p>
<p>Außerdem hab ich das schon mal versucht, die betroffene Variable public zu machen, aber das hat nix geholfen. Auch wenn die Funktion eine leere Implementierung hat, bekomme ich den Fehler. Es muss also schon mit damit schiefgehen</p>
<pre><code class="language-cpp">void PointGeneration::propagateTrue3DPoints(ParameterManager const &amp; pmg, NEWMAT::ColumnVector move)
</code></pre>
<p>Die Klasse Parametermanager habe ich selbst erstellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576435</guid><dc:creator><![CDATA[richtigplusplus]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:58:11 GMT]]></title><description><![CDATA[<p>Also ihr seid echt schneller als ich hier antworten kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: Du hast recht, ich verstehe die Fehlermeldung nicht, würde das gern tun. Im Netz hab ich dazu hauptsächlich Dinge mit friend und mit vererbten Klassen gefunden, aber beides verwende ich nicht.</p>
<p>Da Du die Fehlermeldung anscheinend verstehst, wäre ich ganz froh, wenn Du mir sagen könntest, was da schiefläuft. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576439</guid><dc:creator><![CDATA[richtigplusplus]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:58:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 11:58:38 GMT]]></title><description><![CDATA[<p>Poste noch ein wenig mehr Code (d.h. die relevanten Klassenmember und die zugreifenden Funktionen)... Also alles, was direkt mit dem Fehler zusammenhängt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576441</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Sep 2008 11:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 12:09:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void PointGeneration::propagateTrue3DPoints(ParameterManager const &amp; pmg, NEWMAT::ColumnVector move) /*Vorbed: Projektionsmatrizen und bestückte fullPointTruth-Liste */
{
	NEWMAT::Matrix invtransformation(4,4);
	invtransformation = createHomInvTransfMatrix(move(4), move(5), move(6), move(1), move(2), move(3));	
	NEWMAT::ColumnVector point3D(4);
	std::vector&lt; std::pair&lt;int, NEWMAT::ColumnVector &gt; &gt;::iterator listiter;
	for (listiter = true3Dpoints.begin(); listiter != true3Dpoints.end(); ++listiter)
	{
		//Modify 3D point
		point3D = listiter-&gt;second;
		point3D = invtransformation*point3D;
		if(!isPointInViewField(pmg, point3D))
		{
			point3D = createRandom3DPointInViewField(pmg);
		}
		listiter-&gt;second = point3D;
	}
}
</code></pre>
<p>Das ist die Funktion propagateTrue3DPoints. Der Fehler tritt aber auch auf, wenn die Implementierung leer ist.</p>
<pre><code class="language-cpp">NEWRAN::Uniform myUniRNG;
	NEWRAN::Normal myNormRNG;
	double myseed;

	int nbofpoints;

	double sideBound;
	double zlBound;
	double zuBound;

	NEWMAT::Matrix projMR;
	NEWMAT::Matrix projML;
	NEWMAT::Matrix projMRp1;

	NEWMAT::ColumnVector TrifocalPointList;
	NEWMAT::ColumnVector EpipolarPointList;

	int disturbtype;
	double disturbamount;

	std::vector&lt; std::pair&lt;int, NEWMAT::ColumnVector &gt; &gt; true3Dpoints;
	//hier kommen noch weitere std::vector&lt; &gt;, die aber mit der Funktion nix zu tun haben
</code></pre>
<p>Hatte vergessen, dass auch noch Member vom Typ NEWRAN da sind, glaube aber nicht, dass es daran liegt. (NEWRAN ist ein Zufallszahlengenerator von dem Autor von NEWMAT.)</p>
<p>Die Funktionen isPointInViewField und createRandom3DPointInViewField sind auch private. Sollte es daran liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576451</guid><dc:creator><![CDATA[richtigplusplus]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 12:13:28 GMT]]></title><description><![CDATA[<p>AARGHH. Die Funktion propagateTrue3Dpoints ist selber private.</p>
<p>Mir war von der Sprechweise der Fehlermeldung nicht klar, dass mit Member auch Funktionen gemeint sein können. Hab immer nur an Variablen gedacht.</p>
<p>Dann mal vielen Dank für die Hilfe zur Selbsthilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576454</guid><dc:creator><![CDATA[richtigplusplus]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:13:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 12:15:41 GMT]]></title><description><![CDATA[<p>richtigplusplus schrieb:</p>
<blockquote>
<p>Dann mal vielen Dank für die Hilfe zur Selbsthilfe!</p>
</blockquote>
<p>Kein Problem <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>
<p>Aber glaub mir, es hilft enorm, die Fehlermeldungen zu lesen <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/1576458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576458</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:15:41 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu den &amp;quot;Großen Drei&amp;quot; on Thu, 04 Sep 2008 12:17:43 GMT]]></title><description><![CDATA[<p>Ich hab die Fehlermeldung zig mal gelesen. Aber da mir nicht klar war, dass Member auch Memberfunktion heißen kann, hab ich nur nach Variablen gekuckt.<br />
Bin halt noch nicht soo lange am C++en. Will es aber lieber richtig machen anstatt was hinzupfuschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1576460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1576460</guid><dc:creator><![CDATA[richtigplusplus]]></dc:creator><pubDate>Thu, 04 Sep 2008 12:17:43 GMT</pubDate></item></channel></rss>