Warum erzeugt std :: endl diese kryptische Fehlermeldung?

8

Wenn ich versuche, den folgenden Code zu kompilieren, erhalte ich den folgenden Compiler-Fehler (siehe Code). Er kompiliert ohne Fehler, wenn std::endl entfernt wird.

%Vor%     
Chris_F 24.06.2014, 03:29
quelle

3 Antworten

10

std::endl ist eine Funktionsvorlage. Wenn es verwendet wird, müssen seine Template-Parameter vom Compiler explizit spezifiziert oder abgeleitet werden.

std::ostream hat eine Überladung:

%Vor%

Wenn wir

verwenden %Vor%

Der Compiler leitet die Typen ab, die für std::endl verwendet werden sollen. Da Sie beim Aufruf von print nicht auf die automatische Typableitung zurückgreifen können, müssen Sie explizit angeben, welche Version von std::endl Sie verwenden möchten.

Folgendes sollte funktionieren:

%Vor%

Aktualisieren

Ich habe den folgenden abgespeckten Code verwendet, um das Problem zu verfolgen:

%Vor%     
R Sahu 24.06.2014, 03:48
quelle
5

Ich denke, das liegt daran, dass die Vorlagentypabrechnung fehlschlägt, wenn Sie eine Funktionsvorlage übergeben. Es kann nicht die Parameter für die Instanziierung von endl mit abgeleitet werden.

Beachten Sie, dass die Definition von endl lautet:

%Vor%

Einfacheres Beispiel:

%Vor%

Ihre Fehlermeldungen kommen zustande, weil es verschiedene Möglichkeiten gibt, Ihren Funktionsaufruf dem Parameter-Paket zuzuordnen, aber keiner von ihnen hat funktioniert.

    
M.M 24.06.2014 03:45
quelle
1

Sie können das Problem vermeiden, indem Sie eine einfache endl yourself ( Live-Demo ) definieren ):

%Vor%     
Casey 24.06.2014 14:45
quelle