包括依赖

时间:2016-04-01 06:55:01

标签: c++ oop circular-dependency forward-declaration

我有一个PieceStrategy类:

#include "QueenStrategy.cpp"
class PieceStrategy {
    void promoteToQueen() {
        this = new QueenStrategy();
    }
}

我有一个继承自它的QueenStrategy类:

#include "PieceStrategy.cpp"
class QueenStrategy : public PieceStrategy {}

现在出现循环包含问题。但在这种情况下,我不能使用前向声明。

我该怎么办?

1 个答案:

答案 0 :(得分:4)

  1. 您不应该包含cpp文件,而应包含标题
  2. 您不得分配到this
  3. 选择其他设计。您不应该尝试修改策略,而是为使用该策略的实际对象选择另一个策略。
  4. piece.hpp

    #include "strategy.hpp"
    class Piece
    {
        std::unique_ptr<Strategy> strategy;
    public:
        static Piece Pawn();
        void PromoteToQueen();
    };
    

    piece.cpp

    #include "pawn.hpp"
    #include "queen.hpp"
    
    Piece Piece::Pawn()
    {
        Piece p;
        p.strategy = std::make_unique<PawnStrategy>();
        return p;
    }
    
    void Piece::PromoteToQueen()
    {
        strategy = std::make_unique<QueenStrategy>();
    }