<?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[Frage zu Ableitung]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Frage zu einem kleinen Konstrukt, das nicht so funktioniert wie ichs mir vorgestellt habe.</p>
<ul>
<li>Die Klasse &quot;BaseExport&quot; wird über eine statische Methode angesprochen, die ein konkretes Objekt zurückliefert, das die Export-Schnittstelle implementiert.</li>
<li>Die beiden Klassen &quot;Export01&quot; und &quot;Export02&quot; implementieren jeweils eine eigene Version der Export-Schnittstelle.</li>
</ul>
<p>Wenn ich den nachfolgenden (vereinfachten) Quellcode mit VS2010 kompiliere, bekomme ich die Fehlermeldung:<br />
1&gt;error C2248: 'Export02::Export02' : cannot access protected member declared in class 'Export02'</p>
<p>Ein Objekt vom Typ &quot;Export01&quot; kann ausgeprägt werden da der Konstruktor ja public ist.<br />
Ein Objekt vom Typ &quot;Export02&quot; anscheinend nicht, obwohl es protected ist. Sollte doch aber eigentlich gehen, oder nicht?</p>
<p>Danke und Gruß<br />
Matze</p>
<pre><code class="language-cpp">class BaseExport;
class Export01;
class Export02;

class BaseExport
{
public:
	static BaseExport* getExportObject(int iNr);
	virtual void doExport() = 0;
};

class Export01 : public BaseExport
{
public:
	Export01();
	void doExport();
};

Export01::Export01()
{
	cout &lt;&lt; &quot;ctor Export01&quot; &lt;&lt; endl;
}

void Export01::doExport()
{
	cout &lt;&lt; &quot;export Export01&quot; &lt;&lt; endl;
}

class Export02 : public BaseExport
{
protected:
	Export02();

public:
	void doExport();
};

Export02::Export02()
{
	cout &lt;&lt; &quot;ctor Export02&quot; &lt;&lt; endl;
}

void Export02::doExport()
{
	cout &lt;&lt; &quot;export Export02&quot; &lt;&lt; endl;
}

BaseExport* BaseExport::getExportObject(int iNr)
{
	if (iNr == 1) return new Export01();
	else if (iNr == 2) return new Export02();
}

int _tmain(int argc, _TCHAR* argv[])
{
	BaseExport *exp = BaseExport::getExportObject(1);
	exp-&gt;doExport();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/296563/frage-zu-ableitung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 22:35:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/296563.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Dec 2011 09:55:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Ableitung on Wed, 07 Dec 2011 09:55:51 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe eine Frage zu einem kleinen Konstrukt, das nicht so funktioniert wie ichs mir vorgestellt habe.</p>
<ul>
<li>Die Klasse &quot;BaseExport&quot; wird über eine statische Methode angesprochen, die ein konkretes Objekt zurückliefert, das die Export-Schnittstelle implementiert.</li>
<li>Die beiden Klassen &quot;Export01&quot; und &quot;Export02&quot; implementieren jeweils eine eigene Version der Export-Schnittstelle.</li>
</ul>
<p>Wenn ich den nachfolgenden (vereinfachten) Quellcode mit VS2010 kompiliere, bekomme ich die Fehlermeldung:<br />
1&gt;error C2248: 'Export02::Export02' : cannot access protected member declared in class 'Export02'</p>
<p>Ein Objekt vom Typ &quot;Export01&quot; kann ausgeprägt werden da der Konstruktor ja public ist.<br />
Ein Objekt vom Typ &quot;Export02&quot; anscheinend nicht, obwohl es protected ist. Sollte doch aber eigentlich gehen, oder nicht?</p>
<p>Danke und Gruß<br />
Matze</p>
<pre><code class="language-cpp">class BaseExport;
class Export01;
class Export02;

class BaseExport
{
public:
	static BaseExport* getExportObject(int iNr);
	virtual void doExport() = 0;
};

class Export01 : public BaseExport
{
public:
	Export01();
	void doExport();
};

Export01::Export01()
{
	cout &lt;&lt; &quot;ctor Export01&quot; &lt;&lt; endl;
}

void Export01::doExport()
{
	cout &lt;&lt; &quot;export Export01&quot; &lt;&lt; endl;
}

class Export02 : public BaseExport
{
protected:
	Export02();

public:
	void doExport();
};

Export02::Export02()
{
	cout &lt;&lt; &quot;ctor Export02&quot; &lt;&lt; endl;
}

void Export02::doExport()
{
	cout &lt;&lt; &quot;export Export02&quot; &lt;&lt; endl;
}

BaseExport* BaseExport::getExportObject(int iNr)
{
	if (iNr == 1) return new Export01();
	else if (iNr == 2) return new Export02();
}

int _tmain(int argc, _TCHAR* argv[])
{
	BaseExport *exp = BaseExport::getExportObject(1);
	exp-&gt;doExport();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2154200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154200</guid><dc:creator><![CDATA[MatzeGTO]]></dc:creator><pubDate>Wed, 07 Dec 2011 09:55:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Ableitung on Wed, 07 Dec 2011 10:03:19 GMT]]></title><description><![CDATA[<p>MatzeGTO schrieb:</p>
<blockquote>
<p>Ein Objekt vom Typ &quot;Export02&quot; anscheinend nicht, obwohl es protected ist. Sollte doch aber eigentlich gehen, oder nicht?</p>
</blockquote>
<p>Wenn du von Export02 ableitest, <strong>dann</strong> kannst du auf die Member zugreifen. Aber hier ist Export02 von BasicExport abgeleitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154202</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 07 Dec 2011 10:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Ableitung on Wed, 07 Dec 2011 10:08:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<blockquote>
<p>Ein Objekt vom Typ &quot;Export02&quot; anscheinend nicht, obwohl es protected ist. Sollte doch aber eigentlich gehen, oder nicht?</p>
</blockquote>
<p>Nicht &quot;obwohl&quot;, sondern &quot;weil&quot;.</p>
<p>Da der Konstruktor protected ist, darf die Klasse von außerhalb nicht instanziiert werden.</p>
<p>BaseExport::getExportObject ist außerhalb.</p>
<p>mfg Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2154206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2154206</guid><dc:creator><![CDATA[mgaeckler]]></dc:creator><pubDate>Wed, 07 Dec 2011 10:08:17 GMT</pubDate></item></channel></rss>