问题描述
我想知道是否有任何现有的解决方案:
class b;
class a {
int x;
public:
friend class b;
a() { x = 5 }
void print(b obj) {
cout << x << endl;
cout << obj.y << endl;
}
};
class b {
int y;
public:
friend class a;
b() { y = 10 }
void print(a obj) {
cout << y << endl;
cout << obj.x << endl;
}
};
“这给我带来了一个问题,因为 b 类主体没有在 a 类之前定义,那么有什么简单且现有的方法可以使其工作?
解决方法
对于初学者,您忘记在这些语句后放置分号
x = 5
和
y = 10
你可以定义访问其他类的数据成员的成员函数,当另一个类被定义时,它是一个完整的类型。
所以将类a的函数print的定义放在类b的定义之后。
例如
#include <iostream>
using namespace std;
class b;
class a {
int x;
public:
friend class b;
a() { x = 5; }
/* inline */ void print(b obj);
};
class b {
int y;
public:
friend class a;
b() { y = 10; }
void print(a obj) {
cout << y << endl;
cout << obj.x << endl;
}
};
void a::print(b obj) {
cout << x << endl;
cout << obj.y << endl;
}
int main()
{
a a;
a.print( b() );
b b;
b.print( ::a() );
return 0;
}
程序输出为
5
10
10
5
您可以将带有成员函数声明的类定义放在头文件中,然后在 cpp 文件中定义成员函数。