<?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[Fehler bei einem Test mit dem Singleton Pattern]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>zuerst mal der Code.</p>
<pre><code class="language-cpp">#include  &lt;iostream&gt;
#include &quot;singleton.hpp&quot;

using namespace std;

class CLogfile : TSingleton&lt;CLogfile&gt;
{
	public:
		CLogfile()
		{
			cout &lt;&lt; &quot;Neues Logfile wurde erstellt.&quot; &lt;&lt; endl;
		}
		~CLogfile()
		{
			cout &lt;&lt; &quot;Logfile wurde geschlossen.&quot; &lt;&lt; endl;
		}
		void Statusmeldung()
		{
			cout &lt;&lt; &quot;Status wird ins Logfile geschrieben.&quot; &lt;&lt; endl;
		}
};

void Funktion()
{
	//Eine Statusmeldung ins Logfiel schreiben
	CLogfile::Get()-&gt;Statusmeldung();
}

int main()
{
	//Eine beliebige Funktion aufrufen
	Funktion();

	//Logfile schließen
	CLogfile::Del();

	system(&quot;pause&quot;);

	return 0;
}
</code></pre>
<p>Listing 1: cpp - Datei</p>
<pre><code class="language-cpp">#ifndef TSINGLETON
#define TSINGLETON

template &lt;class T&gt;
class TSingleton
{
	protected:
		static T* m_pSingleton;

	public:
		virtual ~TSingleton()
		{
		}

		//Get
		//
		// Aufgabe: Wenn nötig, statisches Objekt erzeugen un
		// Zeiger darauf zurückgeben
		//
		inline static T* Get()
		{
			//Existiert schon eine Instanz?
			if(!m_pSingleton)
				m_pSingleton = new T;

			//zeiger auf Instanz zurückgeben
			return m_pSingleton;
		} // Get

		//Statisches Objekt freigeben
		//
		static void Del()
		{
			//Gab es eine Instanz?
			if(m_pSingleton)
			{
				delete (m_pSingleton);	//Ja, dann freigeben 
				m_pSingleton = NULL;	//und Zeiger auf NULL setzen
			}
		}// Del
};

// Die statische Variable erzeugen
//
template &lt;class T&gt;
T* TSingleton&lt;T&gt;::m_pSingleton = 0;
#endif
</code></pre>
<p>Listing 2: Singleton.hpp</p>
<p>Nun bekomme ich beim kompilieren die Fehlermeldung:</p>
<p>c:\vs6projects\kapitel8\singleton\logfile.cpp(26) : error C2248: &quot;Get&quot; : Kein Zugriff auf public Element, dessen Deklaration in der Klasse &quot;TSingleton&quot; erfolgte<br />
c:\vs6projects\kapitel8\singleton\singleton.hpp(20) : Siehe Deklaration von 'Get'</p>
<p>Denselben Fehler bekomme ich auch bei Nutzug von Del().</p>
<p>Weiß jemand eine Rat, was ich falsch machen könnte?</p>
<p>Gruß CrazyPlaya</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169815/fehler-bei-einem-test-mit-dem-singleton-pattern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 18:49:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169815.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Jan 2007 09:41:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler bei einem Test mit dem Singleton Pattern on Tue, 09 Jan 2007 09:43:23 GMT]]></title><description><![CDATA[<p>Hi an alle,</p>
<p>zuerst mal der Code.</p>
<pre><code class="language-cpp">#include  &lt;iostream&gt;
#include &quot;singleton.hpp&quot;

using namespace std;

class CLogfile : TSingleton&lt;CLogfile&gt;
{
	public:
		CLogfile()
		{
			cout &lt;&lt; &quot;Neues Logfile wurde erstellt.&quot; &lt;&lt; endl;
		}
		~CLogfile()
		{
			cout &lt;&lt; &quot;Logfile wurde geschlossen.&quot; &lt;&lt; endl;
		}
		void Statusmeldung()
		{
			cout &lt;&lt; &quot;Status wird ins Logfile geschrieben.&quot; &lt;&lt; endl;
		}
};

void Funktion()
{
	//Eine Statusmeldung ins Logfiel schreiben
	CLogfile::Get()-&gt;Statusmeldung();
}

int main()
{
	//Eine beliebige Funktion aufrufen
	Funktion();

	//Logfile schließen
	CLogfile::Del();

	system(&quot;pause&quot;);

	return 0;
}
</code></pre>
<p>Listing 1: cpp - Datei</p>
<pre><code class="language-cpp">#ifndef TSINGLETON
#define TSINGLETON

template &lt;class T&gt;
class TSingleton
{
	protected:
		static T* m_pSingleton;

	public:
		virtual ~TSingleton()
		{
		}

		//Get
		//
		// Aufgabe: Wenn nötig, statisches Objekt erzeugen un
		// Zeiger darauf zurückgeben
		//
		inline static T* Get()
		{
			//Existiert schon eine Instanz?
			if(!m_pSingleton)
				m_pSingleton = new T;

			//zeiger auf Instanz zurückgeben
			return m_pSingleton;
		} // Get

		//Statisches Objekt freigeben
		//
		static void Del()
		{
			//Gab es eine Instanz?
			if(m_pSingleton)
			{
				delete (m_pSingleton);	//Ja, dann freigeben 
				m_pSingleton = NULL;	//und Zeiger auf NULL setzen
			}
		}// Del
};

// Die statische Variable erzeugen
//
template &lt;class T&gt;
T* TSingleton&lt;T&gt;::m_pSingleton = 0;
#endif
</code></pre>
<p>Listing 2: Singleton.hpp</p>
<p>Nun bekomme ich beim kompilieren die Fehlermeldung:</p>
<p>c:\vs6projects\kapitel8\singleton\logfile.cpp(26) : error C2248: &quot;Get&quot; : Kein Zugriff auf public Element, dessen Deklaration in der Klasse &quot;TSingleton&quot; erfolgte<br />
c:\vs6projects\kapitel8\singleton\singleton.hpp(20) : Siehe Deklaration von 'Get'</p>
<p>Denselben Fehler bekomme ich auch bei Nutzug von Del().</p>
<p>Weiß jemand eine Rat, was ich falsch machen könnte?</p>
<p>Gruß CrazyPlaya</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206214</guid><dc:creator><![CDATA[CrazyPlaya]]></dc:creator><pubDate>Tue, 09 Jan 2007 09:43:23 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einem Test mit dem Singleton Pattern on Tue, 09 Jan 2007 09:43:34 GMT]]></title><description><![CDATA[<p>Du hast CLogfile private von TSingleton abgeleitet. Damit sind alle Member von TSingleton in CLogfile private.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206216</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 09 Jan 2007 09:43:34 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler bei einem Test mit dem Singleton Pattern on Tue, 09 Jan 2007 09:44:44 GMT]]></title><description><![CDATA[<p>Ich sollte mir echt ne stärkere Brille zulegen.<br />
Danke dir</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206217</guid><dc:creator><![CDATA[CrazyPlaya]]></dc:creator><pubDate>Tue, 09 Jan 2007 09:44:44 GMT</pubDate></item></channel></rss>