Ich versuche, eine Freund-Funktion innerhalb einer Template-Klasse zu kompilieren, aber die Fehlermeldung und Warnung verstehe ich nicht. Ich habe eine Demonstration des Problems gemacht. Der Fehler, den ich bekomme, ist:
%Vor%prog.cpp: 8: 57: Fehler: Nicht-Klasse, nicht-variable Teilspezialisierung C-Operator + (const B & amp; lhs, const C & amp; rhs);
prog.cpp: 15: 59: warning: Freund-Deklaration 'C-Operator + (const B & amp ;, const C & amp;)' deklariert eine Nicht-Template-Funktion [-Wennon-Vorlage-Freund] Freund C Operator + (const B & amp; lhs, const C & amp; rhs);
prog.cpp: 15: 59: Hinweis: (Wenn dies nicht das ist, was Sie beabsichtigt haben, stellen Sie sicher, dass die Funktionsvorlage bereits deklariert wurde und fügen Sie nach dem Funktionsnamen hier <& p> hinzu)
Diese Erklärung:
%Vor% ... ist falsch wegen der <A,B>
zwischen operator+
und (
, ich weiß nicht genau was du hier machen wolltest. Sie würden dieses Formular verwenden, wenn Sie specify ein Template operator+
spezialisieren möchten, aber Sie sind nicht hier, Sie überladen eins.
Diese Deklaration sollte sein:
%Vor% Dann sollten Sie explizit in Ihrer friend
-Deklaration angeben, dass Sie eine spezielle Version wünschen, indem Sie schreiben:
Sie müssen dies vor Ihr operator+
setzen, sonst wird der Compiler denken, dass dies eine Spezialisierung einer nicht-Template-Funktion ist.
Wie auch immer, wenn Sie keinen wirklichen Grund haben, Ihren Code außerhalb der Klasse C
zu setzen, würde ich @ Jarod42 Lösung gehen.
Ihr ganzer Code sollte so aussehen:
%Vor%