Два класса с методами друга в C++

В настоящее время я читаю книгу о C++ и у него есть некоторые упражнения. В одном из упражнений предлагается построить два класса, где у каждого есть метод друга для другого. Моя текущая догадка выглядит так:

#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;}
};

Но мое предположение не компилируется, потому что класс X иметь void friend Y::f(X* x); объявление метода. Как я могу решить головоломку? Дайте мне еще несколько догадок, пожалуйста.

1 ответ

Решение

Чтобы объявить функцию как друга, компилятор должен сначала увидеть ее, а C++ не допускает предварительных объявлений функций-членов. Поэтому то, что вы пытаетесь сделать, не возможно так, как вы хотите. Вы можете попробовать использовать метод "passkey" отсюда.

В качестве альтернативы, вы можете заменить void friend Y::f(X* x); с friend class Y;,

Другие вопросы по тегам