Moin,
im interface MT_Bla_I stehen die meisten methode von MT_A_C als "virtual" drin.
Es gibt in C++ keine Interfaces. Was meinst du damit?
virtual
heißt lediglich, dass in der Methodentabelle eines Objekts ein echter Pointer auf diese bestimmte Methode hinterlegt wird. Das macht man z.B. bei Basisklassen, wenn im konkreten Fall dann die Methode der abgeleiteten Klasse aufgerufen werden soll anstelle der (vielleicht generischen) der Basisklasse. Mit
virtual methode() = 0;
kannst du sogar erzwingen, dass abgeleitete Klassen diese Methode implementieren müssen.
wenn ich jetzt den Konstruktor von MT_A_C im header ändere zu "MT_A_C(ostream& a):mStreamLog(a){}", dann bekomme ich fehlermeldungen im folgenden format:
Unabhängig von der Fehlermeldung ist es C++ mehr oder weniger gleich, wie die übergebene Variable heißt.
MT_A_C(std::ostream& stream):mLogStream(stream)
und dein obiges MT_A_C(ostream& a):mStreamLog(a)
sind äquivalent – bis auf ein Detail: Im ersten Fall wird das Attribut mLogStream
, im zweiten das Attribut mStreamLog
initialisiert.
error lnk2019 / 2001: unresolved external symbol "public: virtual void ..." und so eine fehlermeldung bekomme ich dann zu jeder methode.
Ohne den konkreten Quellcode zu kennen kann ich leider meine Glaskugel nicht kompilieren.
ka... kann ich das problem irgendwie umgehen und die variable anders übergeben?
Wie ich schrieb, sind Referenzen auf Streamobjekte problematisch. Du könntest einmal Pointer ausprobieren.
Viele Grüße
Robert