Forward declaration & circular dependency

后端 未结 2 1259
盖世英雄少女心
盖世英雄少女心 2020-12-09 12:38

I\'ve got two classes, Entity and Level. Both need to access methods of one another. Therefore, using #include, the issue of circular dependencies arises. Therefore to avoid

2条回答
  •  伪装坚强ぢ
    2020-12-09 13:21

    you two options:

    1. use pointers in which case your forward declares should be ok.
    2. inline the methods of one class, in which case if you include the .h file you can use the methods of the other.

    Personally I would go down path number 1, it's cleaner and allows better access. I use a lot of shared_ptr so I do not have to worry about deletes...

    Entity.h:
    class Level;
    class Entity {
    
    private:
       Level* m_pLevel;
    
    public:
       bool  CheckLevel ();
       bool WasItThere();
    
    
    Level.h
    
    class Entity;
    class Level {
    
    private:
       Entity* m_pEntity;
    
    
    
        public:
           public bool CheckMyStuff();
           public bool CheckItOut() { return m_pEntity->WasItThere();}
    }
    
    
    Entity.cpp
    
    #include "Level.h"
    
    bool Entity::CheckLevel () {
      return true;
    }
    
    
    bool Entity::CheckLevel() {
       return m_pLevel->CheckMyStuff();
    }
    
    bool Entity::WasItThere() {
       return true;
    }
    
    
    
    Level.cpp
    
    bool Level::CheckMyStuff() { 
        return true;
    }
    
    bool Level::CheckItOut() { 
        return m_pEntity->WasItThere();
    }
    

提交回复
热议问题