C++ 不可压缩循环依赖

C++ 不可压缩循环依赖,c++,inheritance,C++,Inheritance,此代码在第3行给出错误C2504:'IKeyEvent':基类未定义 class IKeyEvent; class EventDispatcher : private IKeyEvent { public: enum EEActions { A_FEW_ACTIONS }; private: void OnKey(EventDispatcher::EEActions action, char multiplier); } class IKeyEvent

此代码在第3行给出
错误C2504:'IKeyEvent':基类未定义

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;
};
可以理解,在定义类之前,不能从类继承。但在定义
EventDispatcher
之前,我无法定义
IKeyEvent


我知道我可以将
enum
Event Dispatcher
定义中移出,使其成为全局的,但这需要重构程序的很大一部分。有没有办法让
EventDispatcher
从依赖于
EventDispatcher
的类继承?

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

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

需要在派生类中声明类型的基类?从根本上说,OO设计出了什么问题?@Murali:显然,这“只是”一个重构问题;IKeyEvent现在正在添加,而EventDispatcher已经存在。我不认为在进行时添加接口从根本上是错误的。需要在派生类中声明类型的基类?从根本上说,OO设计出了什么问题?@Murali:显然,这“只是”一个重构问题;IKeyEvent现在正在添加,而EventDispatcher已经存在。我不认为在进行时添加接口是根本错误的。