Два класса с методами друга в 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;
,