Я сделал два одинаковых класса X и Y, указав друг на друга. См. Код ниже для X.h, Y.h идентичен всем X и Y, замененным. Этот код дает, однако, ошибку в моем методе Connect (ошибка C2027: использование undefined типа "Y" ). В X.h у меня есть forward, объявленный классом Y, но он не знает, что Y имеет метод с именем SetXPointer. Поэтому мне также нужно переслать декларировать этот метод, исправить?
Если я попытаюсь это сделать (добавив строку Y:: SetXPointer (X * pX_in); в классе строк Y;), я получаю ошибку компилятора C2761: 'void Y:: SetXPointer (X *)': не разрешено повторное использование функции члена. Есть ли способ использовать общедоступный метод класса Y в классе 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;
};