Im Versuch, eine Klasse friend-Funktion außerhalb des Namespace wie folgt zu definieren:Klasse friend-Funktion in einem Namespace
namespace A{
class window{
private:
int a;
friend void f(window);
};
}
void f(A::window rhs){
cout << rhs.a << endl;
}
Im einen Fehler immer gesagt, dass es eindeutig ist. und es gibt zwei Kandidaten void A::f(A::window);
und void f(A::window)
. Also meine Frage ist:
1) Wie man die globale Funktion void f(A::window rhs)
einen Freund der Klasse A :: window.
EDIT: (nach den Antworten zu lesen)
2), warum muss ich die Member-Funktion f innerhalb Fensterklasse qualifizieren global sein von ::f(window)
tun?
3) Warum muss ich die Funktion f (A :: window) in diesem speziellen Fall vordefinieren, während wenn die Klasse nicht innerhalb eines Namespaces definiert ist, ist OKey für die deklarierte Funktion, nachdem die Funktion deklariert wurde ein Freund.
so der :: Präfix für den Zugriff auf globalen Namensraum ist derjenige, der erforderlich vordefinierte Funktion void f (A :: window); ist das richtig. Danke im Voraus. – AlexDan
Ja, das funktioniert, wenn die Funktion void zurückgibt. Aber was, wenn es eine Instanz einer Klasse zurückgibt, sagen wir B? Dann stößt der Compiler auf "Freund B :: f()", weil er denkt, dass wir "B :: f()" meinen (d. H. Eine Funktion der Klasse B im Gegensatz zu einer globalen Funktion). Irgendeine Lösung dafür? –
Ich sehe nicht, wie Sie mit einem Namenskonflikt so legal enden können - können Sie es auf etwas wie ideone zeigen? – Flexo