Как передать объявление функции-члена класса для использования в другом классе?

Я сделал два одинаковых класса X и Y с указателем друг на друга. См. приведенный ниже код для X.h, Y.h идентичен, все X и Y заменены местами. Однако этот код дает ошибку в моем методе Connect (error C2027 :use of undefined type 'Y' ). В X.h я заранее объявил класс Y, но он не знает, что Y имеет метод с именем SetXPointer. Поэтому мне также нужно предварительно объявить этот метод, правильно?

Если я попытаюсь сделать это (, добавив строку Y ::SetXPointer (X *pX _в ); по классу линии 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;
};
12
задан physicalattraction 5 July 2012 в 12:18
поделиться