Singleton mit DLL, fetter Streit.
-
Hi,
hier wird intialisiert: exLog exLog::m_Instance;
ist ja ein Referenzsingleton und kein Pointersingleton!´
Ich muss den nehmen weil sonst funzt das mit dem operator<< nicht
Ich hab bisher noch keine andere lösung dafür gefunden einen singleton zu benutzen und einen operator<< einzubauen
Drum muss ich den halt nehmen, oder es zeigt mir einer, einen wo das auch geht und der funzt
Denn den mit dem pointer und new, den kenn ich auch, aber da funzt kein operator<<
-
Patrick schrieb:
Ich muss den nehmen weil sonst funzt das mit dem operator<< nicht
Dann ändere das Singleton so ab:
// static attribute static myClass* myClass::m_Instance = NULL; // privat constructor myClass::myClass() { } // public getInstance myClass& myClass::getInstance() { if(m_Instance == NULL) { m_Instance = new myClass; } return *m_Instance; }
-
Hi,
danke für die schnelle hilfe, aber wie muss das im private mit m_Instance aussehen? also die deklaration.
weil ich habe bei der getInstance(); derbste fehler
edit:
Achja, wie ruf ich den singleton dann auf? also ich kenn diesen singleton net so sehr
-
Ich versuche es mal in deinem Code:
class EAGLEX_API exLog { public: static exLog &getInstance (void) { return (*m_Instance); } // ! void setFile (const char *FileName = "Protokoll.txt"); exLog& operator<< (const char* s); private: exLog (void); static exLog* m_Instance; // ! std::ofstream m_Stream; std::string m_FileName; };
// D E F I N I T I O N E N ////////////////////////////////////////////////////////// exLog* exLog::m_Instance; // ! // F U N K T I O N E N ////////////////////////////////////////////////////////////// exLog::exLog(void) { } void exLog::setFile (const char *FileName) { this->m_FileName = FileName; this->m_Stream.open (this->m_FileName.c_str(), std::ios::out); this->m_Stream << "Protokolldatei:\n\n"; this->m_Stream.close (); } exLog& exLog::operator<< ( const char* s ) { this->m_Stream.open (this->m_FileName.c_str(), std::ios::out | std::ios::app); this->m_Stream << s; this->m_Stream.close (); return (*this); }
-
hi,
der fehler kommt noch immer
-
Der Compiler- oder der Prozedureinsprungspunkt-Fehler?
-
wieder der Prozedureinsprungspunkt-Fehler. Compilieren tut er fehlerfrei
-
*push*
Sorry aber es ist echt wichtig.
-
*push*
Leute bitte, es ist echt wichtig! Einer muss doch was wissen, wie das geht
-
Nicht so aufdringlich!
Wann genau kommt denn der Fehler und bei was? Evtl musst du deinen header mit "" anstelle von <> einbinden. Hast du etwas an den Projekteinstellungen verändert (Win32 Anwendung?)
-
wieso sollte ich <> durch "" ändern? ich hab die sourcedateien und includepfade ans projekt umgeleitet so wie sich das für DLLs normalerweise gehören? Funzt auch prima.
Der fehler kommt genau dort, wo ich getInstance(); aufrufe. Es wurde nix geändert.
-
Hast du den Fehler schon gefunden? Wenn nicht, kannst du mir vielleicht das Ganze einschließlich der Projekt-Dateien schicken.