2016-07-22 57 views
1

我試圖指定一個類成員函數作爲另一個類的朋友, 但它只給我的訪問權限,而不是受保護或私人成員的公共成員。它的免費功能工作正常。C++類功能的朋友到另一個類

Visual Studio中的錯誤:

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