C++ 不可压缩循环依赖
此代码在第3行给出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
错误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已经存在。我不认为在进行时添加接口是根本错误的。