嗨,我正在尝试访问B类的A类私有成员
下面的代码显示了我发现但出现错误的方式 任何建议都将有助于实现我的目标。 预先感谢
rotting = {(i + di, j + dj) for i, j in rotting for di, dj
in [(0,1), (1,0), (0, -1), (-1, 0)] if (i + di, j + dj) in fresh}
代码:
> main.cpp: In member function ‘void B::bfun(A*)’:
main.cpp:19:9: error: invalid use of incomplete type ‘class A’
Aref->x = 1;
^~
main.cpp:11:7: note: forward declaration of ‘class A’
class A;
^
main.cpp:20:11: error: ‘x’ was not declared in this scope
cout<<x;
^
答案 0 :(得分:2)
列出的错误与允许访问朋友无关;这是关于什么是不完整类型的实现,这归因于您如何为类声明和成员实现订购代码。将代码更改为在适当的类B::bfun
声明之后A
后的顺序将解决该问题。
#include <iostream>
class A;
class B
{
private:
public:
void bfun (A* Aref);
};
class A{
private:
int x;
B b_obj;
public:
void afun();
friend void B::bfun(A*);
};
void B::bfun(A* Aref)
{
Aref->x = 1;
std::cout<< Aref->x << '\n' ;
}
void A::afun()
{
x=0;
b_obj.bfun(this);
}
int main()
{
A aobj;
aobj.afun();
return 0;
}
输出
1
答案 1 :(得分:0)
由于x不是B的直接成员,但是无论如何您都可以通过x访问它 A,您应该写:
void B::bfun(A* Aref)
{
Aref->x = 1;
std::cout<< Aref->x << '\n' ;
}