Hallo alle zusammen,
ich bin gerade dabei, mir eine Log-Klasse zu schreiben. Die Log-Klasse besitzt zwei statische Methoden für eine Info/Error Message. Außerdem kann man sog. 'LogListener' hinzufügen, die die Log-Nachricht als String übergeben kriegen.
Nun musste ich leider feststellen, dass der Vektor, der die LogListener speichern soll, dies nicht tut. Und ich weiß nicht warum. Hier ist mein Code dazu:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
class Log { public: template<typename T> static void Info(const std::string& sText) { time_t oTime; time(&oTime); std::stringstream sStream; sStream << oTime << " " << typeid(T).name() << " Info: " << sText<<std::endl;
for (unsigned int i = 0; i < maLogListener.size(); ++i) { maLogListener[i]->Info(sStream.str()); } }
template<typename T> static void Error(const std::string& sText) { time_t oTime; time(&oTime); std::stringstream sStream; sStream << oTime << " " << typeid(T).name() << " Error: " << sText << std::endl;
for (unsigned int i = 0; i < maLogListener.size(); ++i) { maLogListener[i]->Error(sStream.str()); } }
static void addLogListener(ILogListener* pLogListener) { maLogListener.push_back(pLogListener); } private: static std::vector<ILogListener*> maLogListener; };
|
|
C-/C++-Quelltext
|
1
|
class ILogListener { public: virtual void Error(const std::string& sError) = 0; virtual void Info(const std::string& sInfo) = 0; };
|
|
C-/C++-Quelltext
|
1
2
|
void Simulation::Error(const std::string& sError) { cerr << sError << endl;}
void Simulation::Info(const std::string& sInfo) { cout << sInfo << endl;}
|
(wobei Simulation natürlich von ILogListener public erbt)
Und abschließend in main.cpp:
|
C-/C++-Quelltext
|
1
2
|
Simulation oSimulation;
Log::addLogListener(&oSimulation);
|
Nach einigem googlen habe ich bereits gelesen, dass es Probleme geben kann, wenn ich die AddLogListener-Methode in einem Konstruktor aufrufe. Hab ich dementsprechend geändert, aber es funktioniert leider trotzdem nicht.
Kann mir einer von euch weiterhelfen?
LG Kyle
Edit: Tut mir Leid, dass der Code so hässlich formatiert ist. Is alles aus VS rauskopiert, wieso geht das nich? :O