2009-10-25 70 views
0

该代码给出了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的类?

+2

'Unfixable'是正确的。 – SLaks 2009-10-25 21:02:07

+0

需要在派生类中声明的类型的基类?这个面向对象设计基本上出了什么问题? – 2009-10-25 21:19:27

+1

@Murali:显然,这只是一个重构问题。现在正在添加IKeyEvent,而EventDispatcher已经出现了。我认为在你添加接口时根本不会有错误。 – 2009-10-25 21:24:12

回答

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(尽管enum是在基类型中定义的)。