Como encaminhar declarar uma função de membro de uma classe para usar em outra classe?

Eu fiz duas classes idênticas X e Y, com um ponteiro para o outro. Veja o código abaixo para X.h, Y.h é idêntico a todos os X's e Ys trocados. Este código fornece, no entanto, um erro no meu método Connect (erro C2027: uso do tipo indefinido 'Y'). Em X.h, eu tenho declarado antecipadamente a classe Y, mas não sei se Y tem um método chamado SetXPointer. Portanto, eu também preciso encaminhar declarar esse método, correto?

Se eu tentar fazer isso (adicionando a linha Y :: SetXPointer (X * pX_in); sob a classe de linha Y;), recebo um erro do compilador C2761: 'void Y :: SetXPointer (X *)': redeclaração de função de membro não permitido. Existe uma maneira de usar um método público da classe Y na classe 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