我刚学习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;
答案 0 :(得分:4)
您既没有声明B::showthis(A)
也没有class B
作为A
班的朋友。
您可以添加
friend B::showthis(A);
或
friend class B;
进入A级。
答案 1 :(得分:4)
你可以看到A是B的朋友,但B不是A的朋友。所以你需要在A中声明朋友B类。
在A组中,添加此行,例如@timrau answer。
friend class B;