2016-04-01 30 views
1

私はPieceStrategyクラスを持っている含めるは依存関係

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

を今円形で問題が含まれて発生します。しかし、この場合、私は前方宣言を使用することはできません。

どうすればよいですか?

+3

あなたはCPP(実装)ファイルを含めるべきではありません。なぜあなたはこれをやっている? –

+3

Doing 'this = new ...'は期待通りに動作しません。 '* this = ...'は部分的に動作するかもしれませんが、 'this'を新しいクラスのインスタンスにしません。 –

+0

あなたの問題については、クラス内でメンバ関数をインラインで定義しないでください。代わりにソースファイルで行います。 '' QueenStrategy.h "'ヘッダファイルを '' PieceStrategy.h "'ヘッダファイルに含める必要はありません。 –

答えて

4
  1. あなたはあなたが別の設計を選択してくださいthis
  2. に割り当ててはならないのcppファイルが、ヘッダ
  3. を含めるべきではありません。戦略を変更するのではなく、その戦略を使用する実際のオブジェクト用に別の戦略を選択してください。

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>(); 
}