2016-07-22 6 views
1

다른 클래스의 친구 인 클래스 멤버 함수를 으로 지정하려고하지만 보호 된 멤버 또는 비공개 멤버가 아닌 public 멤버 만 액세스 할 수 있습니다. 무료 기능으로 잘 작동합니다.다른 클래스의 C++ 클래스 함수 친구

비주얼 스튜디오 오류 :

member "Class1::protected_int" (declared at line 9) is inaccessible 
member "Class1::private_int" (declared at line 11) is inaccessible 
class Class2; 

class Class1 { 
    friend void Class2::TEST(const Class1& ex); 
    friend void TEST(const Class1& ex); 

public: 
    int public_int; 
protected: 
    int protected_int; 
private: 
    int private_int; 
}; 

class Class2{ 
public: 
    void TEST(const Class1& ex); 
}; 

void Class2::TEST(const Class1& ex){ 
    int pub = ex.public_int; 
    int pro = ex.protected_int; 
    int pri = ex.private_int; 
} 

void TEST(const Class1& ex){ 
    int pub = ex.public_int; 
    int pro = ex.protected_int; 
    int pri = ex.private_int; 
} 

Image

답변

3

이 프로그램은 이미 여기에 잘못을 형성한다 : 당신이 멤버에 액세스 할 수 있도록

friend void Class2::TEST(const Class1& ex); 

Class2은 불완전하다 그것의 아직. 코드의 순서를 변경하면 모든 것이 완료되어야 할 때 다음과 같이됩니다.

class Class1; 

class Class2{ 
public: 
    void TEST(const Class1& ex); 
}; 

class Class1{ 
    friend void Class2::TEST(const Class1& ex); 
    friend void TEST(const Class1& ex); 

    // ... 
}; 

모든 것이 잘 컴파일됩니다.

+0

이것은 내가 나 자신을 발견 한 것입니다. 그러나 이것은 'Class1'과'Class2' 사이에'순환적인 우정 '이있을 때 도움이되지 않습니다. – lorro

+0

덕분에 많은 시간을 절약 할 수있었습니다 :) – Ashraf47