<?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[Eigenartiges Verhalten bei private-Vererbung]]></title><description><![CDATA[<p>Hallo,</p>
<p>seht euch mal folgendes destilliertes Klassenkonstrukt an:</p>
<pre><code class="language-cpp">class Uncopyable
{
private:
	Uncopyable( const Uncopyable&amp; );
	Uncopyable&amp; operator=( const Uncopyable&amp; );

public:
	Uncopyable()	{}
	~Uncopyable()	{}
};

template &lt;class T&gt;
class Singleton : private Uncopyable
{
private:
	Singleton( Singleton&amp; )	{}

protected:
	Singleton();

public:
	virtual ~Singleton();
};

class Input : public Singleton&lt;Input&gt;
{
	friend class Singleton&lt;Input&gt;;

private:
	Input();

public:
	~Input();

	class InputDispatcher : private Uncopyable
	{
	public:
		InputDispatcher()			{}
		virtual ~InputDispatcher()	{}
	};
};
</code></pre>
<p>Weiß jemand, warum ich hier in Zeile 37 folgenden Fehler bekomme?</p>
<p>MSVC2005 SP1 Compiler schrieb:</p>
<blockquote>
<p>Error 1 error C2247: 'Uncopyable' not accessible because 'Singleton&lt;T&gt;' uses 'private' to inherit from 'Uncopyable' c:\...\test\main.cpp</p>
</blockquote>
<p>Die nested class InputDispatcher hat doch mit Singleton nix zu tun, ich möchte sie nur von Uncopyable ableiten, nichts weiter. Compilerfehler/-schwäche?</p>
<p>*edit*<br />
Wenn ich Singleton nicht von Uncopyable ableite gehts, btw, eh klar...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209704/eigenartiges-verhalten-bei-private-vererbung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 19:16:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209704.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Apr 2008 13:49:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eigenartiges Verhalten bei private-Vererbung on Wed, 02 Apr 2008 13:51:39 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>seht euch mal folgendes destilliertes Klassenkonstrukt an:</p>
<pre><code class="language-cpp">class Uncopyable
{
private:
	Uncopyable( const Uncopyable&amp; );
	Uncopyable&amp; operator=( const Uncopyable&amp; );

public:
	Uncopyable()	{}
	~Uncopyable()	{}
};

template &lt;class T&gt;
class Singleton : private Uncopyable
{
private:
	Singleton( Singleton&amp; )	{}

protected:
	Singleton();

public:
	virtual ~Singleton();
};

class Input : public Singleton&lt;Input&gt;
{
	friend class Singleton&lt;Input&gt;;

private:
	Input();

public:
	~Input();

	class InputDispatcher : private Uncopyable
	{
	public:
		InputDispatcher()			{}
		virtual ~InputDispatcher()	{}
	};
};
</code></pre>
<p>Weiß jemand, warum ich hier in Zeile 37 folgenden Fehler bekomme?</p>
<p>MSVC2005 SP1 Compiler schrieb:</p>
<blockquote>
<p>Error 1 error C2247: 'Uncopyable' not accessible because 'Singleton&lt;T&gt;' uses 'private' to inherit from 'Uncopyable' c:\...\test\main.cpp</p>
</blockquote>
<p>Die nested class InputDispatcher hat doch mit Singleton nix zu tun, ich möchte sie nur von Uncopyable ableiten, nichts weiter. Compilerfehler/-schwäche?</p>
<p>*edit*<br />
Wenn ich Singleton nicht von Uncopyable ableite gehts, btw, eh klar...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485234</guid><dc:creator><![CDATA[iko79]]></dc:creator><pubDate>Wed, 02 Apr 2008 13:51:39 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiges Verhalten bei private-Vererbung on Wed, 02 Apr 2008 13:57:45 GMT]]></title><description><![CDATA[<p>::Uncopyable funktioniert.</p>
<p>100% erklären kann ich es nicht... sieht so aus, als würde er bei der Suche zuerst in die Klasse (und ihre drüber liegende Hierarchie) &quot;schauen&quot;? Ein ::Uncopyable macht ihm klar wo er suchen soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485244</guid><dc:creator><![CDATA[ihoernchen]]></dc:creator><pubDate>Wed, 02 Apr 2008 13:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiges Verhalten bei private-Vererbung on Wed, 02 Apr 2008 14:20:42 GMT]]></title><description><![CDATA[<p>iko79 schrieb:</p>
<blockquote>
<p>Die nested class InputDispatcher hat doch mit Singleton nix zu tun, ich möchte sie nur von Uncopyable ableiten, nichts weiter. Compilerfehler/-schwäche?</p>
</blockquote>
<p>Eine Folge des unqualifizierten Namelookups in Verbindung mit der Definition einer verschachtelten Klassendefinition.<br />
1. Bei der Angabe der Basisklasse InputDispatcher wird zunächst der Scope von InputDispatcher durchsucht, dort ist dieser Name nicht zu finden (jede folgende Erwähnung von Uncopyable in diesem Scope würde aber hier enden).<br />
2. Anschließend wird der Scope der umliegenden Klasse Input durchsucht. Auch dort ist der Name nicht zu finden.<br />
3. Anschließend werden alle Basisklassen von Input durchsucht. Uncopyable ist (als Basisklasse von Singleton&lt;Input&gt;) ein Member einer Basisklasse von Input. Der unqualifizierte Namelookup endet also hier, wir kommen gar nicht dazu, im umliegenden Namensraum zu suchen.</p>
<p>Anschließend erfolgt dann die Überprüfung von Zugriffsrechten, und daran scheitern wir, denn da Uncopyable eine private Basisklasse von Singleton&lt;Input&gt; ist, haben wir in InputDispatcher keinen Zugriff darauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485259</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 Apr 2008 14:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Eigenartiges Verhalten bei private-Vererbung on Wed, 02 Apr 2008 15:04:18 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17844">@ihoernchen</a>: Danke!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Ebenfalls danke! Irgendsowas hab i mir scho zusammengesponnen, trotzdem find ichs merkwürdig: Sollte der Compilier nicht nach Klassendefinitionen suchen? Im Scope &quot;Input&quot; ist ja definitiv keine *Klasse* mit dem Namen Uncopyable vorhanden, sie leitet nur davon ab. Das einzige, was dort gefunden werden kann ist imho der Basis-Konstruktor mit dem Namen Uncopyable. Und dass ich den nicht als Basisklasse verwenden kann ist klar -- in dem Fall müsste die Fehlermeldung etwas anders aussehen, oder nicht? Bin ja jetzt kein Compiler-Entwickler, gerade deshalb find ich's vermutlich unlogisch...?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1485305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1485305</guid><dc:creator><![CDATA[iko79]]></dc:creator><pubDate>Wed, 02 Apr 2008 15:04:18 GMT</pubDate></item></channel></rss>