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; #endifListing 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