c++中两个带友元方法的类

Two classes with friend methods in C++

本文关键字:友元 方法 两个 c++      更新时间:2023-10-16

目前我在读一本关于C++的书,里面有一些练习。其中一个练习要求构建两个类,其中每个类都有另一个类的friend方法。我目前的猜测是这样的:

#include <iostream>
using std::cout;
using std::endl;
class Y;
class X{
public:
   void friend Y::f(X* x);
   void g(Y* y){cout << "inside g(Y*)" << endl;}
};
class Y{
public:
   void friend X::g(Y* y);
   void f(X* x) {cout << "inside f(X*)"  << endl;}
};

但是我猜不编译,因为类Xvoid friend Y::f(X* x);方法声明。我怎样才能解开这个谜题?

为了将函数声明为友元,编译器必须先看到它,而c++不允许对成员函数进行前向声明。因此,你想要做的事情是不可能以你想要的方式实现的。你可以从这里尝试使用"passkey"方法。

或者,您可以将void friend Y::f(X* x);替换为friend class Y;