Fehler bei einem Test mit dem Singleton Pattern



  • Hi an alle,

    zuerst mal der Code.

    #include  <iostream>
    #include "singleton.hpp"
    
    using namespace std;
    
    class CLogfile : TSingleton<CLogfile>
    {
    	public:
    		CLogfile()
    		{
    			cout << "Neues Logfile wurde erstellt." << endl;
    		}
    		~CLogfile()
    		{
    			cout << "Logfile wurde geschlossen." << endl;
    		}
    		void Statusmeldung()
    		{
    			cout << "Status wird ins Logfile geschrieben." << endl;
    		}
    };
    
    void Funktion()
    {
    	//Eine Statusmeldung ins Logfiel schreiben
    	CLogfile::Get()->Statusmeldung();
    }
    
    int main()
    {
    	//Eine beliebige Funktion aufrufen
    	Funktion();
    
    	//Logfile schließen
    	CLogfile::Del();
    
    	system("pause");
    
    	return 0;
    }
    

    Listing 1: cpp - Datei

    #ifndef TSINGLETON
    #define TSINGLETON
    
    template <class T>
    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 <class T>
    T* TSingleton<T>::m_pSingleton = 0;
    #endif
    

    Listing 2: Singleton.hpp

    Nun bekomme ich beim kompilieren die Fehlermeldung:

    c:\vs6projects\kapitel8\singleton\logfile.cpp(26) : error C2248: "Get" : Kein Zugriff auf public Element, dessen Deklaration in der Klasse "TSingleton" erfolgte
    c:\vs6projects\kapitel8\singleton\singleton.hpp(20) : Siehe Deklaration von 'Get'

    Denselben Fehler bekomme ich auch bei Nutzug von Del().

    Weiß jemand eine Rat, was ich falsch machen könnte?

    Gruß CrazyPlaya



  • Du hast CLogfile private von TSingleton abgeleitet. Damit sind alle Member von TSingleton in CLogfile private.



  • Ich sollte mir echt ne stärkere Brille zulegen.
    Danke dir


Anmelden zum Antworten