<?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[Friend Methode]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich beschäftige mich gerade ein bißchen mit C++ und habe echt keine Ahnung wieso mein Programm nicht funktioniert:</p>
<p>Haendler.h:</p>
<pre><code class="language-cpp">#ifndef HAENDLER_H_
#define HAENDLER_H_
#include &lt;iostream&gt;

#include &quot;Car.h&quot;

class Haendler {

public:
	Car* create();

private:
};

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

Car* Haendler::create(){
	Car* temp = new Car();
	return temp;
}
</code></pre>
<p>Car.h:</p>
<pre><code class="language-cpp">#ifndef CAR_H_
#define CAR_H_
#include &lt;iostream&gt;
using namespace std;

class Haendler;

class Car {
public:
	friend class Haendler;
	void print();
private:
	Car();
};

#endif /* CAR_H_ */
</code></pre>
<p>Car.cpp:</p>
<pre><code class="language-cpp">#include &quot;Car.h&quot;

Car::Car(){
}

void Car::print(){
	cout&lt;&lt;&quot;I'm a car&quot;&lt;&lt;endl;
}
</code></pre>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;haendler.h&quot;
using namespace std;

int main(int argc, char **argv) {

	Haendler *h = new Haendler();
	Car *c = h-&gt;create();
	c-&gt;print();

	return 0;
}
</code></pre>
<p>Also so wie ich das momentan stehen habe funktioniert Alles. Wenn ich aber statt der ganzen Klasse Haendler nur eine Methode davon als Friend deklarieren will klappt das nicht (friend Car* Haendler::create()), weil er die wohl nicht kennt. Habe es statt mit class Haendler auch mit #include &quot;Haendler.h&quot; versucht aber das klappt auch nicht. Kann mir da jemand auf die Sprünge helfen?</p>
<p>ciao, Simon.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275436/friend-methode</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 00:24:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275436.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Oct 2010 14:24:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Friend Methode on Thu, 14 Oct 2010 14:24:33 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich beschäftige mich gerade ein bißchen mit C++ und habe echt keine Ahnung wieso mein Programm nicht funktioniert:</p>
<p>Haendler.h:</p>
<pre><code class="language-cpp">#ifndef HAENDLER_H_
#define HAENDLER_H_
#include &lt;iostream&gt;

#include &quot;Car.h&quot;

class Haendler {

public:
	Car* create();

private:
};

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

Car* Haendler::create(){
	Car* temp = new Car();
	return temp;
}
</code></pre>
<p>Car.h:</p>
<pre><code class="language-cpp">#ifndef CAR_H_
#define CAR_H_
#include &lt;iostream&gt;
using namespace std;

class Haendler;

class Car {
public:
	friend class Haendler;
	void print();
private:
	Car();
};

#endif /* CAR_H_ */
</code></pre>
<p>Car.cpp:</p>
<pre><code class="language-cpp">#include &quot;Car.h&quot;

Car::Car(){
}

void Car::print(){
	cout&lt;&lt;&quot;I'm a car&quot;&lt;&lt;endl;
}
</code></pre>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;haendler.h&quot;
using namespace std;

int main(int argc, char **argv) {

	Haendler *h = new Haendler();
	Car *c = h-&gt;create();
	c-&gt;print();

	return 0;
}
</code></pre>
<p>Also so wie ich das momentan stehen habe funktioniert Alles. Wenn ich aber statt der ganzen Klasse Haendler nur eine Methode davon als Friend deklarieren will klappt das nicht (friend Car* Haendler::create()), weil er die wohl nicht kennt. Habe es statt mit class Haendler auch mit #include &quot;Haendler.h&quot; versucht aber das klappt auch nicht. Kann mir da jemand auf die Sprünge helfen?</p>
<p>ciao, Simon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965617</guid><dc:creator><![CDATA[mikemodanoxxx]]></dc:creator><pubDate>Thu, 14 Oct 2010 14:24:33 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode on Thu, 14 Oct 2010 14:29:09 GMT]]></title><description><![CDATA[<p>Du kannst nur eine Klasse oder eine freistehende Funktion als friend deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965622</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 14 Oct 2010 14:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode on Thu, 14 Oct 2010 14:42:51 GMT]]></title><description><![CDATA[<p>Workaround:</p>
<pre><code class="language-cpp">class Car;
class Haendler
{
public:
    struct Creator{
        static Car* CreateCar();
    };
    Car* CreateCar();
};

class Car
{
public:
    friend struct Haendler::Creator;
private:
    Car(){}
};

Car* Haendler::Creator::CreateCar()
{
    return new Car;
}

Car* Haendler::CreateCar()
{
    return Creator::CreateCar();
}

int main()
{
    Haendler fritz;
    Car* brummi = fritz.CreateCar();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1965624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965624</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Thu, 14 Oct 2010 14:42:51 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode on Thu, 14 Oct 2010 15:05:22 GMT]]></title><description><![CDATA[<p>Ok, vielen Dank. Wieso geht das ganze dann eigentlich bei Templates? Also wie genau fügt der Compiler die Templates dann zusammen, dass das hier doch funktioniert?</p>
<pre><code class="language-cpp">template &lt;class X&gt; class Typ;

template &lt;class X = int&gt; class Doof {
	X *doof;
	friend X* Typ&lt;X&gt;::getDoofTyp();
public:
	Doof(X *param);
	X* getdoof();
};

template &lt;class X&gt; Doof&lt;X&gt;::Doof(X *param) {
	doof = param;
}

template &lt;class X&gt; X* Doof&lt;X&gt;::getdoof() {
	return doof;
}

template &lt;class X = int&gt; class Typ {
	X *typ;
	Doof&lt;X&gt; *d;
public:
	Typ(X *param);
	X* getTyp();
	Doof&lt;X&gt;* getDoof();
	X* getDoofTyp();
};

template &lt;class X&gt; X* Typ&lt;X&gt;::getDoofTyp() {
	return this-&gt;getDoof()-&gt;doof;
}

template &lt;class X&gt; Typ&lt;X&gt;::Typ(X* param) {
	typ = param;
	d = new Doof&lt;X&gt;(param);
}

template &lt;class X&gt; X* Typ&lt;X&gt;::getTyp() {
	return typ;
}

template &lt;class X&gt; Doof&lt;X&gt;* Typ&lt;X&gt;::getDoof() {
	return d;
}

int main(int argc, char **argv) {

	Typ&lt;&gt; *t4 = new Typ&lt;&gt;(new int(4));
	cout &lt;&lt; *t4-&gt;getTyp() &lt;&lt; endl;
	cout &lt;&lt; *t4-&gt;getDoofTyp() &lt;&lt; endl;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1965634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965634</guid><dc:creator><![CDATA[mikemodanoxxx]]></dc:creator><pubDate>Thu, 14 Oct 2010 15:05:22 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode on Thu, 14 Oct 2010 15:22:36 GMT]]></title><description><![CDATA[<p>Auch wenn das Problem schon gelöst zu sein scheint, frage ich mich wieso du eigenlich Haendler in der Car.h brauchst? Hab ich was übersehen oder so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965646</guid><dc:creator><![CDATA[Benötigt?]]></dc:creator><pubDate>Thu, 14 Oct 2010 15:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Friend Methode on Thu, 14 Oct 2010 15:32:19 GMT]]></title><description><![CDATA[<p>War ja nur ein Beispiel, der Kontruktor von Car ist privat und somit sonst nicht zugänglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1965650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1965650</guid><dc:creator><![CDATA[Vicious Falcon]]></dc:creator><pubDate>Thu, 14 Oct 2010 15:32:19 GMT</pubDate></item></channel></rss>