Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#ifndef TSINGLETON #define TSINGLETON template <class T> class TSingleton { protected: static T *m_pSingleton; public: virtual ~TSingleton(); inline static T get() { if(!m_pSingleton) m_pSingleton = new T; return (m_pSingleton); } static void del() { if(m_pSingleton) { delete (m_pSingleton); m_pSingleton = NULL; } } }; template <class T> T* TSingleton<T>::m_pSingleton = 0; #endif |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <iostream> #include "singleton.hpp" using namespace std; class CLogFile : public TSingleton<CLogFile> { public: CLogFile() { cout << "Neues Logfile erstellt"<<endl; } ~CLogFile() { cout << "Logfile wurde geschlossen"<< endl; } void Statusmeldung() { cout << "Meldung wird ausgegeben"<< endl; } }; void Funktion() { CLogFile::get() -> Statusmeldung(); } int main() { int a; Funktion(); CLogFile::del(); cin >> a; } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 |
Compiling... main.cpp m:\workspace\visual studio 2005\projects\singletons_test\singletons_test\main.cpp(27) : error C2819: type 'CLogFile' does not have an overloaded member 'operator ->' m:\workspace\visual studio 2005\projects\singletons_test\singletons_test\main.cpp(6) : see declaration of 'CLogFile' did you intend to use '.' instead? m:\workspace\visual studio 2005\projects\singletons_test\singletons_test\main.cpp(27) : error C2232: '->CLogFile::Statusmeldung' : left operand has 'class' type, use '.' Build log was saved at "file://m:\workspace\Visual Studio 2005\Projects\singletons_test\singletons_test\Debug\BuildLog.htm" singletons_test - 2 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 |
------ Build started: Project: singletons_test, Configuration: Debug Win32 ------ Compiling... main.cpp Compiling manifest to resources... Linking... main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall TSingleton<class CLogFile>::~TSingleton<class CLogFile>(void)" (??1?$TSingleton@VCLogFile@@@@UAE@XZ) referenced in function __unwindfunclet$??0CLogFile@@QAE@XZ$0 M:\workspace\Visual Studio 2005\Projects\singletons_test\Debug\singletons_test.exe : fatal error LNK1120: 1 unresolved externals Build log was saved at "file://m:\workspace\Visual Studio 2005\Projects\singletons_test\singletons_test\Debug\BuildLog.htm" singletons_test - 2 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== |
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 |
virtual ~TSingleton(); |
Anonymous
unregistriert
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#include <stdio.h> template <class T> class Singleton { public: static T& getInstance() { static T instance; return instance; } }; class Test : public Singleton<Test> { // Damit das Singleton den privaten Konstruktor aufrufen darf friend class Singleton<Test>; private: int n; // Konstruktor ist private damit keine "normale" Instantiierung // erfolgen kann Test() { printf("Test::Test()\n"); n=1; } ~Test() { printf("Test::~Test()\n"); } public: int get() { return n; } void set(int nr) { n=nr; } }; int main() { printf("%d\n", Test::getInstance().get() ); Test::getInstance().set(10); printf("%d\n", Test::getInstance().get() ); // Test a; // <-- ergibt Fehler. Instantiierung nicht erlaubt return 0; } |
Anonymous
unregistriert
Quellcode |
|
1 2 3 |
m:\workspace\visual studio 2005\projects\class_logfile\class_logfile\logfile.cpp(21) : warning C4996: 'fopen' was declared deprecated c:\programme\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen' Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.' |
Anonymous
unregistriert
Werbeanzeige