2017-05-02 1 views
1

f는 struct Y의 멤버 함수이며 struct X에서 친구로 선언되었습니다. f가 의도 한대로 X의 private 멤버에 액세스 할 수없는 이유는 무엇입니까?C++ 멤버가 친구로 기능 함

회원 기능을 효과적으로 만드는 방법을 이해할 수 있도록 도와주십시오. 필자는 친구들처럼 글로벌 함수의 접근 가능한 예제를 쉽게 발견했지만 멤버 함수는 찾지 못했습니다.

struct X; 

struct Y { 
    void f(X* a); 
}; 

struct X { 
private: 
    int i; 
public: 
    friend void Y::f(X* a); 
}; 

void Y::f(X* x) { 
    x->i = 0; // Error: member "X::i" (declared at line 9) is inaccessible 
} 
+1

http://ideone.com/goHLoC 어떤 컴파일러를 사용합니까? – Slava

+1

나를위한 작품 g ++ 5.1.0 –

+1

Visual Studio 인 경우 intellisense는 오류를보고하는 것으로 보이지만 잘 컴파일해야합니다. – AlexG

답변

-1

F가 가상 일 필요가 없습니까? 내가 틀렸을 수도있다.

+0

dv가 아니고 아니요,'Y :: f (X *)'가상을 만들면 아무런 효과가 없습니다. – George

관련 문제