-1

我在 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提供了另一个类似的示例,但是该示例无法在我的计算机上运行,​​所以我需要检查一些编译器标志吗?

4

1 回答 1

3

换来换去?

class A;

class B
{
public:
int fun(A inst);
private:
int b;
};

class A
{
friend int B::fun(A A);
private:
int a;
};

int B::fun(A A)
{   int N = A.a + b;
return N;
}
于 2012-12-21T17:11:03.993 回答