Prohlášení přítele
Deklarujete přítele funkci, která není deklarován dříve, funkce, je exportován ohraničujícím oboru nonclass.
Funkce deklarované v prohlášení přítele se pracuje, jako kdyby byly deklarovány pomocí extern klíčové slovo.(Další informace o extern, viz Statické Specifikátory paměťových tříd.)
Přestože funkce s globálním rozsahem mohou být deklarovány jako přátelé před jejich prototypů, funkce členů nelze deklarovat jako přátele před vzhled jejich deklarace třídy dokončeno.Následující kód Proč to selhání:
class ForwardDeclared; // Class name is known.
class HasFriends
{
friend int ForwardDeclared::IsAFriend(); // C2039 error expected
};
V předchozím příkladu zadá název třídy ForwardDeclared do oboru, ale kompletní prohlášení – konkrétně část, která deklaruje funkci IsAFriend – není znám.Proto friend prohlášení v třídě HasFriends generuje chybu.
Chcete-li deklarovat dvě třídy, které jsou přátelé jeden musí být zadán celý druhé třídy jako přítele první třídy.Důvod tohoto omezení je, že kompilátor nemá dostatek informací k deklarovat přítele jednotlivé funkce pouze v místě, kde je deklarována druhé třídy.
[!POZNÁMKA]
Ačkoli celé druhé třídy musí být přítele do první třídy, můžete vybrat, které funkce v první třídě budou přátelé druhé třídy.