2014-02-06 122 views
0

我剛剛學習C++的朋友類。正如書中所說,朋友課程可以訪問所有成員(私人和受保護的)。但在我的情況中並不是這樣。朋友分類:不能訪問私人會員?

我知道有這個愚蠢的錯誤,我看不到。請幫我找到它:d

我的代碼:

#include <iostream> 
using namespace std; 

class A; 
class B { 
private: 
    int num; 
public: 
    B(int n=0):num(n){} 

    friend int add(A, B); 
    friend int mul(A, B); 
    friend int sub(A, B); 
    void showthis(A); 
    friend class A; 
}; 

class A{ 
private: 
    int num; 
public: 
    A(int n=0):num(n){} 

    friend int add(A, B); 
    friend int mul(A, B); 
    friend int sub(A, B); 
}; 

int add(A a, B b){ 
    return a.num+b.num; 
} 

int sub(A a, B b){ 
    return a.num-b.num; 
} 

int mul(A a, B b){ 
    return a.num*b.num; 
} 


void B::showthis(A a){ 
    cout<<a.num<<endl; 
} 

int main(){ 
    A a(3); 
    B b(6); 
    cout<<add(a,b)<<endl; 
    cout<<mul(a,b)<<endl; 
    cout<<sub(a,b)<<endl; 
    b.showthis(a); 
} 

錯誤:

q17.cpp: In member function ‘void B::showthis(A)’: 
q17.cpp:20:6: error: ‘int A::num’ is private 
    int num; 
    ^
q17.cpp:43:10: error: within this context 
    cout<<a.num<<endl; 
+1

友誼不是遺傳,傳遞或互惠。 –

回答

4

你既不聲明也不B::showthis(A)作爲class BA的朋友。

你可以添加或者

friend B::showthis(A); 

friend class B; 

到A級

+0

解決了這個問題。 :D任何解釋? – cipher

+4

@cipher你宣稱A類是B的朋友。正如CaptainObvlious所說,這種關係不是互惠的。這允許A訪問B的私人成員,但反之亦然。 –

4

你可以看到A是B的朋友,但B不是A的朋友所以你需要在A中聲明朋友類B

在A類中,添加這行,就像@timrau的答案。

friend class B;