Ich programmiere gerade eine Logger-Klasse, aber die Methode operator<<
verursacht einen Compilerfehler. Hier ist eine minimierte Version der Klasse in der Datei "logger.h":
Es ist in meiner main.cpp enthalten und funktioniert perfekt, wenn ich ein String-Literal ausgabe:
%Vor%Das Folgende wird jedoch nicht kompiliert.
%Vor%Der g ++ Compiler meldet:
src / main.cpp: 5: Fehler: keine Übereinstimmung für 'operator & lt; & lt;' in 'log & lt; & lt; std :: endl '
Ihr Problem besteht nicht in der Kette von <<
, ein einzelnes log << endl
würde ebenfalls das Problem verursachen. Dies liegt daran, dass std::endl
eine Vorlagenfunktion ist:
Eine der Überladungen von operator<<
in basic_ostream
ist:
So können die Template-Parameter abgeleitet werden, wenn std::cout<<std::endl
verwendet wird. Wenn die linke Seite jedoch class Logger
ist, kann die Kompilierung die Schablonenparameter von endl
nicht ableiten. Explizit geben die Template-Parameter können Programm kompilieren und arbeiten lassen:
Oder Sie können eine neue Überladung von operator<<
in class Logger
hinzufügen, damit der Compiler die Vorlagenparameter von std::endl
:
Wenn Sie nicht möchten, dass die Ausgabe sofort gelöscht wird, können Sie anstelle von endl
'\ n' verwenden.
Der Fehler wird von std::endl
verursacht, was eine Funktion ist. Siehe:
std :: endl ist vom unbekannten Typ, wenn der Operator & lt; & lt ;