<?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[Funktion von Basisklasse wird nicht gefunden]]></title><description><![CDATA[<p>Hi, warum wird die Funktion &quot;ToString()&quot; hier nicht gefunden?</p>
<pre><code>class Object
{
public:
	Object() {};
};

class Convertible : public virtual Object
{
public:
	virtual String* ToString(int i) const = 0;
	String* ToString() const { return nullptr; };
};

class String
{
public:
	String() {};
};

class AClass : public Object, public virtual Convertible
{
public:
	AClass(){};

private:
	virtual String* ToString(int i) const { return new String(); };
};

int main()
{
	AClass a;
	a.ToString();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/327814/funktion-von-basisklasse-wird-nicht-gefunden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 00:48:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327814.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 05 Sep 2014 15:33:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion von Basisklasse wird nicht gefunden on Fri, 05 Sep 2014 15:33:05 GMT]]></title><description><![CDATA[<p>Hi, warum wird die Funktion &quot;ToString()&quot; hier nicht gefunden?</p>
<pre><code>class Object
{
public:
	Object() {};
};

class Convertible : public virtual Object
{
public:
	virtual String* ToString(int i) const = 0;
	String* ToString() const { return nullptr; };
};

class String
{
public:
	String() {};
};

class AClass : public Object, public virtual Convertible
{
public:
	AClass(){};

private:
	virtual String* ToString(int i) const { return new String(); };
};

int main()
{
	AClass a;
	a.ToString();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2416251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416251</guid><dc:creator><![CDATA[Enumerator]]></dc:creator><pubDate>Fri, 05 Sep 2014 15:33:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion von Basisklasse wird nicht gefunden on Fri, 05 Sep 2014 15:42:13 GMT]]></title><description><![CDATA[<p>Weil sie alle ToString heißen versteckt fir eue die alte.</p>
<pre><code>class AClass : public Object, public virtual Convertible
{
public:
    AClass(){};
    using Convertible::ToString;//mich versteckst du da unten nicht!
private:
    virtual String* ToString(int i) const { return new String(); };
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2416252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416252</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 05 Sep 2014 15:42:13 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion von Basisklasse wird nicht gefunden on Fri, 05 Sep 2014 15:44:05 GMT]]></title><description><![CDATA[<p>Ist sowas schönes Design? Hört sich für mich eher erstmal &quot;müllig&quot; an, wenn ein Aufruf an den gleichen Funktionsnamen intern ggf. was anderes tut als von extern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416253</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Fri, 05 Sep 2014 15:44:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion von Basisklasse wird nicht gefunden on Fri, 05 Sep 2014 15:47:12 GMT]]></title><description><![CDATA[<p>Ganz einfach:<br />
Wenn der Compiler etwas sieht, was er als Funktionsaufruf interpretieren kann, fängt er an die Funktion zu suchen.<br />
Dabei geht er vom Scope, der &quot;am nächsten dran&quot; an der Funktion ist, aus und dann immer weiter in die äußeren. Er hört auf, sobald er eine oder mehrere Funktionen gefunden hat.<br />
In diesem Fall ist das eine Memberfunktion, also fängt er an in der Klassenfunktion des Objektes zu suchen, also von AClass. Dort findet er eine Funktion, also hört er auf.<br />
Es kümmert ihn nicht, dass die Funktion private ist, Zugriffsrechte spielen keine Rolle.<br />
Die Lösung ist entweder die private Funktion umzubennen oder den Aufruf explicit zu qualifizieren.</p>
<pre><code>a.Convertible::ToString()
</code></pre>
<p>Das gängige Idiom in C++ wär in diesem Fall übrigens eine freie Funktion zu schreiben, die via ADL gefunden werden kann.<br />
In Konsistenz zu std::to_string kann man dann in irgend einem generischem Code folgendes schreiben:</p>
<pre><code>T a;
using std::to_string; // Name bekannt machen
return to_string(a); // sowohl std::to_string als auch eine to_string Funktion im Scope von T werden gefunden und die beste ausgewählt
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2416254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416254</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 05 Sep 2014 15:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion von Basisklasse wird nicht gefunden on Fri, 05 Sep 2014 16:21:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@Volkard</a><br />
Danke das funktioniert. Muss nur leider in jeder abgeleiteten Klasse eingefügt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416258</guid><dc:creator><![CDATA[Enumerator]]></dc:creator><pubDate>Fri, 05 Sep 2014 16:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion von Basisklasse wird nicht gefunden on Fri, 05 Sep 2014 16:41:08 GMT]]></title><description><![CDATA[<p>Möchte nur mal drauf hinweisen, dass der Code relativ schrottig ist. So sieht kein gutes C++ aus. So sieht C++ aus, wie es ein Javaprogrammierer schreiben würde.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">String* blah() {
    String* s = new String(&quot;wtf?!&quot;);
    return s;
}
</code></pre>
<p>--&gt;</p>
<pre><code class="language-cpp">std::string blah() {
    return &quot;besser&quot;;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2416261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416261</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 05 Sep 2014 16:41:08 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion von Basisklasse wird nicht gefunden on Fri, 05 Sep 2014 16:49:11 GMT]]></title><description><![CDATA[<p>Natürlich ist das gutes Design! Das sieht man doch schon alleine daran, das jedes Object wirlich auch ein Object ist und als solches behandelt werden kann!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2416262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2416262</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Fri, 05 Sep 2014 16:49:11 GMT</pubDate></item></channel></rss>