我在 C++ 中遇到了友谊问题。我有两个类,A 和 B,其中 B 的定义使用了 A 的某个实例。我还想让 B 中的成员函数访问 A 中的私有数据成员,从而授予它友谊。但现在的难题是,对于 A 类定义中的友谊声明,B 类尚未定义,因此 IDE(VS 2010)不知道该怎么做。
#include <iostream>
using namespace std;
class B;
class A {
friend int B::fun(A A);//B as yet undefined here
int a;
};
class B {
int b;
public:
int fun(A inst);
};
int B::fun(A A)
{
int N = A.a + b;//this throws up an error, since a is not accessible
return N;
}
我看过为什么这个朋友功能不能访问班级的私人成员?但是那里使用前向声明的建议class B;
似乎不起作用。我怎样才能直接解决这个问题(即不求助于交class B
朋友class A
,或者让 B 从 A 继承或引入一个getA()
函数)?我还查看了从不同的头文件中定义的类中为函数授予友谊,但我的类在一个 .cpp 文件中(最好保持这种方式),而不是在单独的头文件中,我这样做了反正也不想给整个班级的友谊。同时,C++前向声明,友元函数问题提供了一个稍微简单的问题的答案——我不能仅仅改变定义的顺序。同时, http: //msdn.microsoft.com/en-us/library/ahhw8bzz.aspx提供了另一个类似的示例,但是该示例无法在我的计算机上运行,所以我需要检查一些编译器标志吗?