<?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 zwei Klassen - Error: &amp;quot;No matching function for call to *constructor*&amp;quot;]]></title><description><![CDATA[<p>Hey,<br />
vielleicht könnt ihr einem Neuling eben schnell helfen:</p>
<pre><code class="language-cpp">class A {
      public:
             A(int data);
      private:
              int mData;
};
class B {
      public:
             B();
      private:
              A mMember;
};

A::A(int data): mData(data) {}
B::B() {mMember = A(5);} //Hier tritt der Fehler auf!
</code></pre>
<p>Der Fehler lautet: no matching function for call to `A::A()'<br />
Als &quot;Note&quot; schlägt er mir die beiden Konstruktoren von A vor, also den von mir geschriebenen und den Kopierkonstruktor.</p>
<p>Ich benutze Dev-C++ 4.9.9.2</p>
<p>Also wenn ich das richtig verstanden habe, möchte er, dass ich &quot;mMember&quot; auch initialisiere mithilfe eines Konstruktors, aber das tue ich doch!?</p>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279701/probleme-mit-zwei-klassen-error-quot-no-matching-function-for-call-to-constructor-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 11:09:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279701.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Jan 2011 00:08:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit zwei Klassen - Error: &amp;quot;No matching function for call to *constructor*&amp;quot; on Sun, 02 Jan 2011 00:08:06 GMT]]></title><description><![CDATA[<p>Hey,<br />
vielleicht könnt ihr einem Neuling eben schnell helfen:</p>
<pre><code class="language-cpp">class A {
      public:
             A(int data);
      private:
              int mData;
};
class B {
      public:
             B();
      private:
              A mMember;
};

A::A(int data): mData(data) {}
B::B() {mMember = A(5);} //Hier tritt der Fehler auf!
</code></pre>
<p>Der Fehler lautet: no matching function for call to `A::A()'<br />
Als &quot;Note&quot; schlägt er mir die beiden Konstruktoren von A vor, also den von mir geschriebenen und den Kopierkonstruktor.</p>
<p>Ich benutze Dev-C++ 4.9.9.2</p>
<p>Also wenn ich das richtig verstanden habe, möchte er, dass ich &quot;mMember&quot; auch initialisiere mithilfe eines Konstruktors, aber das tue ich doch!?</p>
<p>Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001165</guid><dc:creator><![CDATA[PeterPain]]></dc:creator><pubDate>Sun, 02 Jan 2011 00:08:06 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit zwei Klassen - Error: &amp;quot;No matching function for call to *constructor*&amp;quot; on Sun, 02 Jan 2011 00:14:29 GMT]]></title><description><![CDATA[<p>Im Konstruktor von A hast du es doch schon richtig gemacht! Der Konstruktor von B muss genau so implementiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001167</guid><dc:creator><![CDATA[Manni66]]></dc:creator><pubDate>Sun, 02 Jan 2011 00:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit zwei Klassen - Error: &amp;quot;No matching function for call to *constructor*&amp;quot; on Sun, 02 Jan 2011 00:40:52 GMT]]></title><description><![CDATA[<p>Ah okay danke, ich dachte das könnte man bei Klasseninstanzen nicht so einfach machen.</p>
<p>Aber schau dir mal das hier an:</p>
<pre><code class="language-cpp">class A {
      public:
             A(int data);
             int mData;
};
class B {
      public:
             B();
             A mMembers[3];
             void init();
};

A::A(int data): mData(data) {}

B::B() {
     init();
}
void B::init() {
     for (int i=0; i&lt;3; ++i)
           mMembers[i] = A(i);
}
</code></pre>
<p>EDIT: habe das Beispiel mal als Array gestaltet, sodass es mehr Sinn macht, eine Init-Funktion zu verwenden.</p>
<p>wenn ich im Konstruktor jetzt eine Init-Funktion aufrufen möchte, kommt genau das gleiche Problem, und das kann ich ja nicht so einfach umgehen (oder?). Wie könnte man das denn beheben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001168</guid><dc:creator><![CDATA[PeterPain]]></dc:creator><pubDate>Sun, 02 Jan 2011 00:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit zwei Klassen - Error: &amp;quot;No matching function for call to *constructor*&amp;quot; on Sun, 02 Jan 2011 04:17:52 GMT]]></title><description><![CDATA[<p>Vorweg mal die Lösung für &quot;ohne Array&quot;: du musst die Initializer-List verwenden.<br />
So wie du bei A::A das Member &quot;mData&quot; initialisierst, kannst (bzw. musst) du in B::B auch das Member &quot;mMember&quot; initialisieren.</p>
<p>Bei &quot;mData&quot; wäre es nicht nötig, da &quot;mData&quot; einfach in &quot;int&quot; ist, und der muss nicht unbedingt initialisiert werden.</p>
<p>Da &quot;A&quot; aber eine Klasse ohne Default-Constructor ist, musst du die Constructor-Parameter angeben, also so:</p>
<pre><code class="language-cpp">B::B()
    : mMember(5) // A::A(int data) wird verwendet, mit data = 5
{
    // mMember = A(5); // hier nichtmehr notwendig
}
</code></pre>
<p>Zum 2. Beispiel mit Arrays: das geht in C++ 98 bzw. 03 nicht. (In C++0x schon wenn ich mich richtig erinnere, nur der neue Standard ist noch nicht fix, und vorhandene Compiler unterstützen erst einen kleinen Teil der neuen Features)</p>
<p>Was du natürlich machen kannst, ist einen Default-Constructor für A zu definieren. Dann geht beide Beispiele ohne Änderungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001178</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 02 Jan 2011 04:17:52 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit zwei Klassen - Error: &amp;quot;No matching function for call to *constructor*&amp;quot; on Sun, 02 Jan 2011 10:59:45 GMT]]></title><description><![CDATA[<p>Ahh okay, vielen Dank. So funktioniert es.<br />
Dass die Initializer-List so unumgänglich ist, wusste ich gar nicht.<br />
Naja wie auch immer, habe jetzt einen Defaultconstructor geschrieben. Jetzt werden die Objekte von A automatisch im Konstruktor von B erstellt und in der init-Funktion verändere ich nur die Werte.<br />
Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001200</guid><dc:creator><![CDATA[PeterPain]]></dc:creator><pubDate>Sun, 02 Jan 2011 10:59:45 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit zwei Klassen - Error: &amp;quot;No matching function for call to *constructor*&amp;quot; on Mon, 03 Jan 2011 02:38:19 GMT]]></title><description><![CDATA[<p>PeterPain schrieb:</p>
<blockquote>
<p>Ahh okay, vielen Dank. So funktioniert es.<br />
Dass die Initializer-List so unumgänglich ist, wusste ich gar nicht.</p>
</blockquote>
<p>Ist sie, ja. Sämtliche Member und Basisklassen müssen vollständig initialisiert (=konstruiert) sein, bevor der &quot;Rumpf&quot; des Konstruktors losläuft, d.h. vor der &quot;{&quot; Klammer.<br />
Daher muss man entweder Konstruktor-Parameter angeben, oder die Klasse des Members/die Basisklasse muss einen Default-Konstruktor haben.</p>
<p>Natürlich kann man sich über Zeiger/Container behelfen, wenn das direkte Initialisieren in der Initializer-List aus irgend einem Grund nicht möglich/zu umständlich wäre, und man die Klassen nicht abändern kann (=ihnen einen Default-Konstruktor verpassen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2001507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2001507</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 03 Jan 2011 02:38:19 GMT</pubDate></item></channel></rss>