Jak przekazać deklarację funkcji składowej klasy do użycia w innej klasie?

Zrobiłem dwie identyczne klasy X i Y, ze wskaźnikiem do siebie. Zobacz poniższy kod dla X.h, Y.h jest identyczny ze wszystkimi X i Y zamienionymi. Ten kod daje jednak błąd w mojej metodzie Connect (błąd C2027: użycie niezdefiniowanego typu „Y”). W X.h przekazałem deklarowaną klasę Y, ale nie wie, że Y ma metodę o nazwie SetXPointer. Dlatego też muszę przekazać deklarację tej metody, prawda?

Jeśli spróbuję to zrobić (dodanie linii Y :: SetXPointer (X * pX_in); pod linią klasy Y;), otrzymuję błąd kompilatora C2761: 'void Y :: SetXPointer (X *)': deklaracja funkcji składowej nie dozwolony. Czy istnieje sposób na użycie publicznej metody klasy Y w klasie X?

// X.h

#pragma once

#include "Y.h"

// Forward declaration
class Y;

class X
{
public:
    X(void) : data(24) {};
    ~X(void) {};
    int GetData() { return data; }
    void SetYPointer(Y* pY_in) { pY = pY_in; }
    Y* GetYPointer() { return pY; }
    void Connect(Y* Y_in) { pY = Y_in; Y_in->SetXPointer(this); }
private:
    int data;
    Y *pY;
};

questionAnswers(4)

yourAnswerToTheQuestion