C ++ Verkettung des Operators für std :: cout like usage [duplicate]

10

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":

%Vor%

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 '

    
Tuxer 07.12.2011, 13:15
quelle

2 Antworten

13

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:

%Vor%

Eine der Überladungen von operator<< in basic_ostream ist:

%Vor%

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:

%Vor%

Oder Sie können eine neue Überladung von operator<< in class Logger hinzufügen, damit der Compiler die Vorlagenparameter von std::endl :

ableitet %Vor%

Wenn Sie nicht möchten, dass die Ausgabe sofort gelöscht wird, können Sie anstelle von endl '\ n' verwenden.

    
fefe 07.12.2011, 13:40
quelle
0

Der Fehler wird von std::endl verursacht, was eine Funktion ist. Siehe:

std :: endl ist vom unbekannten Typ, wenn der Operator & lt; & lt ;

    
Eric Z 07.12.2011 13:42
quelle

Tags und Links