<?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[Objekt-Konstruktor in Memberliste einer anderen Klasse?]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich versuche einen Objekt-Konstruktor in der Memberliste einer anderen Klasse aufzurufen, leider bekomme ich folgende Fehler:</p>
<p>ClassB.h:11:14: Fehler: »Bar« is not a type<br />
ClassB.h:11:17: Fehler: expected »,« or »...« before »-&gt;« token</p>
<p>Hier, mein Quellcode:</p>
<p>ClassA.h</p>
<pre><code class="language-cpp">#ifndef ClassA_
#define ClassA_

class ClassA
{
	public:
		int* Test;

	public:
		ClassA(int* inTest)
		{
			Test = inTest;
		}
};

#endif
</code></pre>
<p>ClassB.h</p>
<pre><code class="language-cpp">#ifndef ClassB_
#define ClassB_

#include &quot;ClassC.h&quot;
#include &quot;ClassA.h&quot;

class ClassB
{
	public:
		ClassC* Bar;
		ClassA Foo(Bar-&gt;Ptr); // Hier tritt der Fehler auf
};

#endif
</code></pre>
<p>ClassC.h</p>
<pre><code class="language-cpp">#ifndef ClassC_
#define ClassC_

class ClassC
{
	public:
		int* Ptr;
};

#endif
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">#include &quot;ClassB.h&quot;

int main(int argc, char** argv)
{
	return 0;
}
</code></pre>
<p>Mit freundlichen Grüßen,<br />
DarkBug</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/309831/objekt-konstruktor-in-memberliste-einer-anderen-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 01:58:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/309831.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Oct 2012 16:59:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 16:59:28 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>ich versuche einen Objekt-Konstruktor in der Memberliste einer anderen Klasse aufzurufen, leider bekomme ich folgende Fehler:</p>
<p>ClassB.h:11:14: Fehler: »Bar« is not a type<br />
ClassB.h:11:17: Fehler: expected »,« or »...« before »-&gt;« token</p>
<p>Hier, mein Quellcode:</p>
<p>ClassA.h</p>
<pre><code class="language-cpp">#ifndef ClassA_
#define ClassA_

class ClassA
{
	public:
		int* Test;

	public:
		ClassA(int* inTest)
		{
			Test = inTest;
		}
};

#endif
</code></pre>
<p>ClassB.h</p>
<pre><code class="language-cpp">#ifndef ClassB_
#define ClassB_

#include &quot;ClassC.h&quot;
#include &quot;ClassA.h&quot;

class ClassB
{
	public:
		ClassC* Bar;
		ClassA Foo(Bar-&gt;Ptr); // Hier tritt der Fehler auf
};

#endif
</code></pre>
<p>ClassC.h</p>
<pre><code class="language-cpp">#ifndef ClassC_
#define ClassC_

class ClassC
{
	public:
		int* Ptr;
};

#endif
</code></pre>
<p>Main.cpp</p>
<pre><code class="language-cpp">#include &quot;ClassB.h&quot;

int main(int argc, char** argv)
{
	return 0;
}
</code></pre>
<p>Mit freundlichen Grüßen,<br />
DarkBug</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2264999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2264999</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Sun, 28 Oct 2012 16:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 17:10:20 GMT]]></title><description><![CDATA[<p>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265005</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 28 Oct 2012 17:10:20 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 17:11:17 GMT]]></title><description><![CDATA[<p>Ah! <strong>Jetzt</strong> sehe ich!<br />
Was du machen willst, macht aber überhaupt keinen Sinn, denn Bar ist zu dem Zeitpunkt noch überhaupt nicht initialisiert. Was du willst geht zwar (mit C++11, non-static data member initialization), ist aber definitiv nicht was du willst.<br />
Mach lieber das hier:</p>
<pre><code class="language-cpp">#ifndef ClassB_
#define ClassB_

#include &quot;ClassC.h&quot;
#include &quot;ClassA.h&quot;

class ClassB
{
    public:
        ClassC* Bar;
        ClassA Foo; // Hier tritt kein Fehler auf

        ClassB(ClassC* barPtr):
             Bar(barPtr),
             Foo(Bar-&gt;Ptr) {}
};

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2265007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265007</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 28 Oct 2012 17:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 17:10:58 GMT]]></title><description><![CDATA[<p>In der Datei ClassB.h in Zeile 11 möchte ich ein Objekt der Klasse ClassA erstellen, das den Namen Foo trägt. Für dieses Objekt soll der in ClassA definierte Konstruktor aufgerufen und der Zeiger Bar, welcher eine Zeile darüber definiert wurde in diesen Konstruktor übergeben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265009</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Sun, 28 Oct 2012 17:10:58 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 17:11:44 GMT]]></title><description><![CDATA[<p>DarkBug schrieb:</p>
<blockquote>
<p>In der Datei ClassB.h in Zeile 11 möchte ich ein Objekt der Klasse ClassA erstellen, das den Namen Foo trägt. Für dieses Objekt soll der in ClassA definierte Konstruktor aufgerufen und der Zeiger Bar, welcher eine Zeile darüber definiert wurde in diesen Konstruktor übergeben werden.</p>
</blockquote>
<p>Aber Bar ist nicht initialisiert! Was will ClassA's Konstruktor damit!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265010</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 28 Oct 2012 17:11:44 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 17:21:06 GMT]]></title><description><![CDATA[<p>Sorry, das hatte ich jetzt nicht im Beispiel drin. ClassB und auch der Zeiger Bar sind initialisiert. Also wenn der Zeiger später in einer Methode benutzt wird ist er nicht NULL.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265014</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Sun, 28 Oct 2012 17:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 17:25:30 GMT]]></title><description><![CDATA[<p>DarkBug schrieb:</p>
<blockquote>
<p>Sorry, das hatte ich jetzt nicht im Beispiel drin. ClassB und auch der Zeiger Bar sind initialisiert. Also wenn der Zeiger später in einer Methode benutzt wird ist er nicht NULL.</p>
</blockquote>
<p>Du kannst nicht einen Konstruktor aufrufen wann du willst. Dann müsstest du schon eine Methode in <code>ClassA</code> definieren, mit der man nachträglich auf den Zeiger zugreifen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265018</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 28 Oct 2012 17:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 18:13:55 GMT]]></title><description><![CDATA[<p>Also ist es unmöglich einen Konstruktor außerhalb einer Funktion/Methode aufzurufen?</p>
<p>So funktioniert es aber auch nicht:</p>
<p>ClassB.h</p>
<pre><code class="language-cpp">#ifndef ClassB_
#define ClassB_

#include &quot;ClassC.h&quot;
#include &quot;ClassA.h&quot;

class ClassB
{
	public:
		ClassC* Bar;
		ClassA Foo;

	public:
		ClassB()
		{
			Foo(Bar-&gt;Ptr);
		}
};

#endif
</code></pre>
<p>Fehlermeldung:<br />
In file included from Main.cpp:1:0:<br />
ClassB.h: In Konstruktor »ClassB::ClassB()«:<br />
ClassB.h:15:3: Fehler: keine passende Funktion für Aufruf von »ClassA::ClassA()«</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265045</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Sun, 28 Oct 2012 18:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 18:20:04 GMT]]></title><description><![CDATA[<p>DarkBug schrieb:</p>
<blockquote>
<p>Fehlermeldung:<br />
In file included from Main.cpp:1:0:<br />
ClassB.h: In Konstruktor »ClassB::ClassB()«:<br />
ClassB.h:15:3: Fehler: keine passende Funktion für Aufruf von »ClassA::ClassA()«</p>
</blockquote>
<p>Du darfst Konstruktoren nicht einfach so aufrufen. Die werden nur aufgerufen wenn ein Objekt initialisiert wird, und sie <strong>müssen</strong> aufgerufen werden - einer von ihnen. Bei dir rufst du gar keinen in der Initialisierungsliste auf, also wird der Default-Ctor genommen - der ja nicht existiert.</p>
<p>Nimm einfach</p>
<pre><code class="language-cpp">public:
        ClassB():
             Foo(Bar-&gt;Ptr)
        {
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2265048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265048</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 28 Oct 2012 18:20:04 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 18:42:34 GMT]]></title><description><![CDATA[<p>... <code>Bar</code> muss dann aber auch initialisiert werden.</p>
<pre><code class="language-cpp">public:
        ClassB():
             Bar( /* whatever */ ),
             Foo(Bar-&gt;Ptr)
        {
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2265060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265060</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 28 Oct 2012 18:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Sun, 28 Oct 2012 20:37:23 GMT]]></title><description><![CDATA[<p>Funktioniert. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265108</guid><dc:creator><![CDATA[DarkBug]]></dc:creator><pubDate>Sun, 28 Oct 2012 20:37:23 GMT</pubDate></item><item><title><![CDATA[Reply to Objekt-Konstruktor in Memberliste einer anderen Klasse? on Mon, 29 Oct 2012 08:22:23 GMT]]></title><description><![CDATA[<p>Was mir gestern noch einfiel im Zusammenhang mit Initialisierungslisten: die Reihenfolge der Initialisierung findet in der Reihenfolge statt, in der die Member in der Klassendefinition auftreten. Die 2 Varianten des Standard-c'tors unten sind also äquivalent. <code>Bar</code> wird <strong>immer</strong> vor <code>Foo</code> initialisiert, weil <code>Bar</code> vor <code>Foo</code> in der Definition von <code>ClassB</code> steht (Zeilen 5 u. 6).</p>
<pre><code class="language-cpp">class ClassB{
public:
  ClassB();
private:
  ClassC* Bar;
  ClassA Foo;
};

// 1
ClassB::ClassB() :
  Bar( /* blabla */ ),
  Foo( /* blabla */ )
  { }

// 2
ClassB::ClassB() :
  Foo( /* blabla */ ),
  Bar( /* blabla */ )
  { }
</code></pre>
<p>Ich meine mich zu entsinnen, dass Compiler auch davor warnen, wenn die Reihenfolge vertauscht wird...<br />
Du kannst ja spasseshalber <code>Foo</code> und <code>Bar</code> in der Klassendefinition vertauschen und Dein Programm elendig crashen sehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2265215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2265215</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Mon, 29 Oct 2012 08:22:23 GMT</pubDate></item></channel></rss>