<?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[Compiler fordert Standardkonstruktor]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe eine Klasse Xy, die als Attribut der Klasse Z hat. Jetzt wollte ich gerne die Standardkonstruktoren ausschalten, habe also nur noch die Konstruktoren genommen die ich brauche.</p>
<p>Jetzt nörgelt der Compiler, dass es keinen Standardkonstruktor gibt. Aber ich frage mich gerade, warum der Standardkonstruktor von der Klasse Msa überhaupt gerufen wird ?!</p>
<p>Danke vorab.</p>
<pre><code class="language-cpp">class H2r {

private:
    Msa msa;

public:
    //H2r() {
        //cout &lt;&lt; &quot;H2r-construct( default )\n&quot;;
        //cout &lt;&lt; &quot;... // H2r-construct()\n&quot;;
    //}

    H2r( Msa&amp; m ) {
        //cout &lt;&lt; &quot;H2r-construct( Msa m )\n&quot;;
        this-&gt;msa = m;
        //cout &lt;&lt; &quot;... // H2r-construct()\n&quot;;
    }
</code></pre>
<p>... error: no matching function for call to ‘Msa::Msa()’</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284651/compiler-fordert-standardkonstruktor</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 22:06:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284651.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2011 14:55:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compiler fordert Standardkonstruktor on Tue, 05 Apr 2011 14:55:50 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich habe eine Klasse Xy, die als Attribut der Klasse Z hat. Jetzt wollte ich gerne die Standardkonstruktoren ausschalten, habe also nur noch die Konstruktoren genommen die ich brauche.</p>
<p>Jetzt nörgelt der Compiler, dass es keinen Standardkonstruktor gibt. Aber ich frage mich gerade, warum der Standardkonstruktor von der Klasse Msa überhaupt gerufen wird ?!</p>
<p>Danke vorab.</p>
<pre><code class="language-cpp">class H2r {

private:
    Msa msa;

public:
    //H2r() {
        //cout &lt;&lt; &quot;H2r-construct( default )\n&quot;;
        //cout &lt;&lt; &quot;... // H2r-construct()\n&quot;;
    //}

    H2r( Msa&amp; m ) {
        //cout &lt;&lt; &quot;H2r-construct( Msa m )\n&quot;;
        this-&gt;msa = m;
        //cout &lt;&lt; &quot;... // H2r-construct()\n&quot;;
    }
</code></pre>
<p>... error: no matching function for call to ‘Msa::Msa()’</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045020</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Tue, 05 Apr 2011 14:55:50 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler fordert Standardkonstruktor on Tue, 05 Apr 2011 15:00:09 GMT]]></title><description><![CDATA[<p>Weil msa bei diesem Aufruf</p>
<pre><code class="language-cpp">this-&gt;msa = m;
</code></pre>
<p>schon konstruiert ist. Besser wäre</p>
<pre><code class="language-cpp">class H2r {

private:
    Msa msa;

public:
    H2r( Msa&amp; m ) : msa( m ) {
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2045023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045023</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 05 Apr 2011 15:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler fordert Standardkonstruktor on Tue, 05 Apr 2011 15:20:30 GMT]]></title><description><![CDATA[<p>Ausserdem würde ich die Referenz auf ein konstantes Objekt zeigen lassen:</p>
<pre><code class="language-cpp">H2r(const Msa&amp; m);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2045035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045035</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 05 Apr 2011 15:20:30 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler fordert Standardkonstruktor on Tue, 05 Apr 2011 15:28:35 GMT]]></title><description><![CDATA[<p>Initialisierung von membern findet VOR der ausführung des Konstruktors statt. (in deinem Fall wird Msa initialisiert, bzw konstruiert bevor H2R(Msa&amp; m) aufgerufen wird) Gibt es keinen Standardkonstruktor für die Initialisierung muss man die nötigen variablen, wie Manni66 geschrieben hat, in einer Initilisierungsliste angeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045037</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Tue, 05 Apr 2011 15:28:35 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler fordert Standardkonstruktor on Tue, 05 Apr 2011 15:39:35 GMT]]></title><description><![CDATA[<p>kleiner Troll schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Ich schreibe das ganze mal etwas verständlicher um:</p>
<p>Innerhalb des Konstruktorrumpfes existiert das Objekt bereits, und somit sind die Initialisierungen bereits abgeschlossen, es finden hier nur noch Zuweisungen statt.</p>
<p>Der Konstruktor verfügt aber neben den Rumpf noch über eine Initialisierungsliste, in der die Initialisierung beeinflusst werden kann (u.a. wichtig bei Vererbung, wenn die Basisklasse keinen Standardkonstruktor anbietet, bei Konstanten, Referenzen...).</p>
<pre><code class="language-cpp">class A
{
  private:
    int a;
    int b;

  public:
    A()
    : a(0), b(1) // &lt;-- Initialisierungsliste
    {
       // &lt;-- Konstruktorrumpf
    }
};
</code></pre>
<p>Eins muss man bei der Initialisierungsliste beachten: Die Initialisierung findet in Reihenfolge der Memberdeklaration statt (sprich, wenn ich oben a und b in der Initialisierungsliste vertausche wird dennoch a zuerst initialisiert, da weiter oben deklariert). Dies ist wichtig wenn man Initialisierungen voneinander abhängig macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045039</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 05 Apr 2011 15:39:35 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler fordert Standardkonstruktor on Tue, 05 Apr 2011 15:42:20 GMT]]></title><description><![CDATA[<p>kleiner Troll schrieb:</p>
<blockquote>
<p>Initialisierung von membern findet VOR der ausführung des Konstruktors statt.</p>
</blockquote>
<p>Nein. Strenggenommen gehört die Initialisierung von Basisklassen und Membern zur Ausführung des Ctor mit dazu - es wird aber vor Betreten des Konstruktorrumpfes (Funktionsrumpfes des Ctors) initialisiert.</p>
<blockquote>
<p>(in deinem Fall wird Msa initialisiert, bzw konstruiert bevor H2R(Msa&amp; m) aufgerufen wird)</p>
</blockquote>
<p>Nein. Der Konstruktor wird aufgerufen, erst nach dem Aufruf wird initialisiert, aber eben vor dem Rumpf. Erkennt man auch daran, dass die Argumente des Aufrufs in der Initialisierungsliste verwendet werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045041</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 Apr 2011 15:42:20 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler fordert Standardkonstruktor on Wed, 06 Apr 2011 02:58:26 GMT]]></title><description><![CDATA[<p>Gut, hast natürlich recht, hab ich so nicht bedacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045283</guid><dc:creator><![CDATA[kleiner Troll]]></dc:creator><pubDate>Wed, 06 Apr 2011 02:58:26 GMT</pubDate></item></channel></rss>