Templated Class Friend Operator-Mitglied-Funktion

8

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:

  

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)

%Vor%     
JadziaMD 02.05.2016, 18:02
quelle

2 Antworten

3

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:

%Vor%

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%     
Holt 02.05.2016, 18:22
quelle
5

Am einfachsten ist ein Inline-Code innerhalb der Klasse:

%Vor%

Demo

Der Code, der in der Klasse nicht inlined ist, erfordert viel Aufmerksamkeit als Vorwärtsdeklarationsreihenfolge der Deklaration, seltsame -Syntax <> :

%Vor%

Demo

    
Jarod42 02.05.2016 18:34
quelle

Tags und Links