不可修复的循环依赖

时间:2009-10-25 20:59:34

标签: c++ inheritance

此代码在第3行提供error C2504: 'IKeyEvent': base class undefined

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 个答案:

答案 0 :(得分:5)

我的建议:将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(尽管在基类型中定义了枚举)。