Нефиксированная циклическая зависимость - PullRequest
0 голосов
/ 25 октября 2009

Этот код дает error C2504: 'IKeyEvent': base class undefined в строке 3.

class IKeyEvent;

class EventDispatcher : private IKeyEvent {
public:
    enum EEActions {
        A_FEW_ACTIONS
    };
private:
    void OnKey(EventDispatcher::EEActions action, char multiplier);
}

class IKeyEvent {
public:
    virtual void OnKey(EventDispatcher::EEActions action, char multiplier) = 0;
};

Вы не можете наследовать от класса, пока он не будет определен, понятно. Но я не могу определить IKeyEvent до после определения EventDispatcher.

Я знаю, что могу вывести это enum из определения Event Dispatcher, чтобы сделать его глобальным, но для этого потребуется рефакторинг большой части программы. Есть ли способ получить EventDispatcher наследовать от класса, зависящего от EventDispatcher?

1 Ответ

5 голосов
/ 26 октября 2009

Моя рекомендация: переместить EEActions в базовый класс - это является частью интерфейса, в конце концов:

class IKeyEvent {
public:
    enum EEActions {
        A_FEW_ACTIONS
    };
    virtual void OnKey(EEActions action, char multiplier) = 0;
};

class EventDispatcher : public IKeyEvent {
private:
    void OnKey(EventDispatcher::EEActions action, char multiplier);
};

Если вы также сделаете наследование от IKeyEvent общедоступным, вы можете продолжать ссылаться на перечисление как EventDispatcher::EEActions (несмотря на то, что перечисление определено в базовом типе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...