<?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[Ueberladene Funktionen ...]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">class MyClass
{
public:
	MyClass(const char*);			// Konstruktor
	friend bool Check(const MyClass&amp;);	// friend-Funktion
	// mehr Methoden
private:
	bool Check(const char*);	// Funktion mit demselben Namen wie
					// die friend-Funktion
};

inline MyClass::MyClass(const char* s)
{
	assert(Check(s));	// klappt wunderbar
				// ruft die private Funktion bool Check(const char*)
				// auf
}

inline void MyClass::IrgendeineMethodeinMyClass()
{
	// s ist vom Typ MyClass
	if (Check(s)) return;	// gibt Compiler-Fehler
				// const MyClass&amp; kann nicht in const char*
				// konvertiert werden
				// normalerweise muesste doch einfach die
				// friend-Funktion aufgerufen werden
				// wieso tut mein Compiler das nicht?
	// mehr Code
}

inline bool Check(const MyClass&amp; s)	// friend-Funktion
{
	return Check(&quot;bla&quot;);		// Aufruf der privaten Funktion
}

inline bool MyClass::Check(const char*)	// Definition der privaten Funktion
{
	// viel Code
}

// zwar koennte man das Problem schnell loesen, indem man die private Funktion
// umbenennt, z.B. in Check2(), aber ich wuerde doch ganz gerne verstehen,
// warum der Compiler die friend-Funktion nicht findet und stattdessen vergeblich
// versucht die MyClass-Refernz zu const char* umzuwandeln
</code></pre>
<p>Steh grad irgendwie aufm Schlauch...</p>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234914/ueberladene-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 08:58:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234914.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Feb 2009 15:17:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ueberladene Funktionen ... on Mon, 23 Feb 2009 15:17:12 GMT]]></title><description><![CDATA[<p>Hallo</p>
<pre><code class="language-cpp">class MyClass
{
public:
	MyClass(const char*);			// Konstruktor
	friend bool Check(const MyClass&amp;);	// friend-Funktion
	// mehr Methoden
private:
	bool Check(const char*);	// Funktion mit demselben Namen wie
					// die friend-Funktion
};

inline MyClass::MyClass(const char* s)
{
	assert(Check(s));	// klappt wunderbar
				// ruft die private Funktion bool Check(const char*)
				// auf
}

inline void MyClass::IrgendeineMethodeinMyClass()
{
	// s ist vom Typ MyClass
	if (Check(s)) return;	// gibt Compiler-Fehler
				// const MyClass&amp; kann nicht in const char*
				// konvertiert werden
				// normalerweise muesste doch einfach die
				// friend-Funktion aufgerufen werden
				// wieso tut mein Compiler das nicht?
	// mehr Code
}

inline bool Check(const MyClass&amp; s)	// friend-Funktion
{
	return Check(&quot;bla&quot;);		// Aufruf der privaten Funktion
}

inline bool MyClass::Check(const char*)	// Definition der privaten Funktion
{
	// viel Code
}

// zwar koennte man das Problem schnell loesen, indem man die private Funktion
// umbenennt, z.B. in Check2(), aber ich wuerde doch ganz gerne verstehen,
// warum der Compiler die friend-Funktion nicht findet und stattdessen vergeblich
// versucht die MyClass-Refernz zu const char* umzuwandeln
</code></pre>
<p>Steh grad irgendwie aufm Schlauch...</p>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668802</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Mon, 23 Feb 2009 15:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Ueberladene Funktionen ... on Mon, 23 Feb 2009 15:33:23 GMT]]></title><description><![CDATA[<p>Dies hat mit dem Scope zu tun. Mit der friend Definition holst du die globale oder freie Funktion nicht in den Scope der Klasse. In der Klasse überdeckt die <code>bool Check(char const*)</code> die andere Funktion. Wenn du die globale oder freie Funktion aufrufen willst, dann musst du in den entsprechenden Scope wechseln.</p>
<p>Also wenn die freie Funktion zum Beispiel im globalen Scope ist, dann musst du sie so aufrufen:</p>
<pre><code class="language-cpp">::Check(s);
</code></pre>
<p>Falls sie im Namensraum foo ist, dann so:</p>
<pre><code class="language-cpp">::foo::Check(s);
</code></pre>
<p>Überladung funktioniert nur im selben Scope, sonst wird überdeckt. Musste ich erst vor kurzem auch wieder schmerzlich lernen, allerdings in einem anderen Zusammenhang <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>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668811</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 23 Feb 2009 15:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to Ueberladene Funktionen ... on Mon, 23 Feb 2009 15:49:45 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a><br />
Hatte das ja eigentlich schon gelernt, aber nur in Verbindung mit Variablen:</p>
<pre><code class="language-cpp">int a = 1;		// globales a
void foo()	// warum eigtl. immer &quot;foo()&quot;? is mir schon oefter
		// hier im Forum aufgefallen...
{
	int a = 2;
	std::cout &lt;&lt; a;		// a aus foo()
	std::cout &lt;&lt; ::a;	// globales a
}
</code></pre>
<p>ich hatte eben gedacht, der Compiler sucht sich anhand der Parameter schon die passende Funktion auf. An den Scope-Operator dachte ich gar nicht...</p>
<p>Danke fuer die Aufklarung. <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>
<p>Gruss<br />
Cartman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668821</guid><dc:creator><![CDATA[Eric Cartman]]></dc:creator><pubDate>Mon, 23 Feb 2009 15:49:45 GMT</pubDate></item><item><title><![CDATA[Reply to Ueberladene Funktionen ... on Mon, 23 Feb 2009 15:56:51 GMT]]></title><description><![CDATA[<p>Eric Cartman schrieb:</p>
<blockquote>
<p>warum eigtl. immer &quot;foo()&quot;? is mir schon oefter<br />
// hier im Forum aufgefallen...</p>
</blockquote>
<p><a href="http://de.wikipedia.org/wiki/Metasyntaktische_Variable" rel="nofollow">http://de.wikipedia.org/wiki/Metasyntaktische_Variable</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668823</guid><dc:creator><![CDATA[foo_baz]]></dc:creator><pubDate>Mon, 23 Feb 2009 15:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Ueberladene Funktionen ... on Mon, 23 Feb 2009 16:00:14 GMT]]></title><description><![CDATA[<p>Der Compiler sucht normalerweise schon die richtige Funktion, anhand der Parameter. Aber es gibt halt auch bei Funktionen einen Überdeckung. Der ganze Suchvorgang ist eigentlich relativ komplex. Da könnte man wohl einfach ein ganzes Kapitel in einem Buch füllen. Wenn man sogar in die Details geht, würde es vielleicht für ein ganzes Buch reichen <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>
<p>Zu Foo, Bar, Fubar und co:<br />
<a href="http://de.wikipedia.org/wiki/Foo#Foo_in_der_IT-Branche" rel="nofollow">http://de.wikipedia.org/wiki/Foo#Foo_in_der_IT-Branche</a><br />
<a href="http://de.wikipedia.org/wiki/Metasyntaktische_Variable" rel="nofollow">http://de.wikipedia.org/wiki/Metasyntaktische_Variable</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1668825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1668825</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 23 Feb 2009 16:00:14 GMT</pubDate></item></channel></rss>