代码之家  ›  专栏  ›  技术社区  ›  Nick Whaley

不可修复的循环依赖项

  •  0
  • Nick Whaley  · 技术社区  · 16 年前

    此代码给出 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 定义使其成为全局的,但这需要重构程序的很大一部分。有什么办法吗 事件调度器 从依赖于的类继承 事件调度器 ?

    1 回复  |  直到 16 年前
        1
  •  5
  •   Martin v. Löwis    16 年前

    我的建议:将eActions移动到基类-it 接口的一部分,毕竟:

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