다음을 통해 공유


Friend 선언

이전에 선언되지 않은 friend 함수를 선언하는 경우 해당 함수가 바깥쪽 비클래스 범위로 내보내집니다.

friend 선언에서 선언된 함수는 extern 키워드를 사용하여 선언된 것처럼 취급됩니다. extern에 대한 자세한 내용은 정적 저장소 클래스 지정자를 참조하십시오.

전역 범위를 갖는 함수는 프로토타입 이전에 friend로 선언될 수 있지만, 멤버 함수는 전체 클래스 선언이 나타나기 전에 friend로 선언될 수 없습니다. 다음 코드에서는 이러한 작업이 실패하는 이유를 보여 줍니다.

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

위의 예제에서는 클래스 이름 ForwardDeclared를 범위에 입력하지만, 전체 선언(특히 IsAFriend 함수를 선언하는 부분)은 알 수 없습니다. 따라서 HasFriends 클래스의 friend 선언은 오류를 생성합니다.

서로 friend인 두 클래스를 선언하려면 두 번째 클래스 전체가 첫 번째 클래스의 friend로 지정되어야 합니다. 이러한 제한은 컴파일러가 두 번째 클래스가 선언된 지점에서만 개별 friend 함수를 선언하는 데 충분한 정보를 갖기 때문에 발생합니다.

참고

두 번째 클래스 전체가 첫 번째 클래스의 friend여야 하지만, 두 번째 클래스의 friend가 될 첫 번째 클래스의 함수를 선택할 수 있습니다.

참고 항목

참조

friend (C++)