000
05.12.2004, 21:36 Uhr
~ugh_bough_
Gast
|
hi. hab mal eine frage. will mir eine exception klasse machen, um erst mal die grundlagen der vererbung in c++ zu lernen. bis jetzt hab ich das hier
C++: |
#include <iostream> #include <fstream> #include <string>
using namespace std;
class Exception { private: string _type; string _msg;
static bool startLog; static char* logFile;
public: Exception(const string& msg, const string& type = ""): _type(type + "Exception"), _msg(msg) { log(*this); }
static void resetLog() { ofstream ofs(logFile); ofs.close(); }
static void log(Exception& re) { if (startLog) { startLog = false;
ofstream ofs(logFile); ofs << re << endl; ofs.close(); } else { ofstream ofs(logFile, ios::out | ios::app); ofs << re << endl; ofs.close(); } }
friend ostream& operator << (ostream& ros, const Exception& re) { ros << re._type << ": " << re._msg; return ros; } };
bool Exception::startLog = true; char* Exception::logFile = "./exceptions.log";
|
wenn ich aber nun eine speziellere exception von dieser basisklasse ableite, möchte ich auch mehr info in den stream ausgeben. dazu muss ich ja den operator<< überschreiben. wenn ich aber diese abgeleitete exception als basis exception behandeln möchte, dann muss die funktion ja virtual sein, damit die überschriebene version dieser "funktion" (nämlich die der abgeleiteten klasse) benutzt wird.
wenn ich aber
C++: |
... virtual friend ostream& operator << (ostream& ros, const Exception& re) { ros << re._type << ": " << re._msg; return ros; } ...
|
versuche, gibt der compiler
Code: |
Exception.hpp:49: error: virtual functions cannot be friends Exception.hpp:49: error: `std::ostream& Exception::operator<<(std::ostream&, const Exception&)' must take exactly one argument Exception.hpp: In static member function `static void Exception::log(Exception&)': Exception.hpp:37: error: no match for 'operator<<' in 'ofs << re'
|
und noch mehr fehlermeldungen aus.
kann mir jemand sagen, was ich falsch mache. könnte dieser jemand auch eine kurze erklärung abgeben, damit ich die hintergründe verstehe. mann will ja nicht dumm bleiben
vielen dank ugh_bough |