Sdílet prostřednictvím


Friend – deklarace

Je-li deklarována přátelská funkce, která před tím deklarována nebyla, je tato funkce exportována do ohraničujícího netřídního oboru.

Funkce deklarované v rámci přátelské deklarace jsou brány, jako kdyby byly deklarovány klíčovým slovem extern. (Další informace o extern naleznete v tématu Statické specifikátory paměťových tříd.)

Přestože lze funkce s globálním rozsahem deklarovat jako přátelské s předností před jejich prototypy, nelze členské funkce deklarovat jako přátelské před objevením deklarace jejich úplné třídy.Následující kód ukazuje důvod selhání:

class ForwardDeclared;   // Class name is known.
class HasFriends
{
    friend int ForwardDeclared::IsAFriend();   // C2039 error expected
};

Předchozí příklad zadá do rozsahu název třídy ForwardDeclared, ale úplná deklarace - konkrétně část deklarující funkci IsAFriend - není známa.Proto deklarace friend ve třídě HasFriends vygeneruje chybu.

Je-li třeba deklarovat dvě třídy, které jsou navzájem spřáteleny, celá druhá třída musí být zadána jako přátelská třída první třídy.Důvod tohoto omezení je, že kompilátor má dostatek informací pro deklarování jednotlivých přátelských funkcí pouze v případě, kdy je deklarována druhá třída.

[!POZNÁMKA]

Ačkoli celá druhá třída musí být přátelskou třídou první třídy, je možné vybrat, které funkce první třídy budou přáteli druhé třídy.

Viz také

Referenční dokumentace

friend (C++)