2017-11-15 19 views
-3

私は私の頭を包み込むように見えない宿題を与えられました。私たちの教師は、有限状態マシンをプログラムすることを望んでいます。ここでコードC++有限状態マシン

#ifndefine 
#define FINITE_STATE_MACHINE_H 
#include <iosfwd> 

class FiniteStateMachine 
    { 
     Private: 
     friend std::ostream &operator<< (std::ostream &, FiniteStateMachine const &); 

     public: 
      FiniteStateMachine(){} 
      virtual FiniteStateMachine *changeState() const = 0; 
      virtual char const *toString() const = 0; 
      virtual ~FiniteStateMachine(){} 
    }; 

class ON : public FiniteStateMachine 
    { 
     private: 

     public: 
      ON(){} 
      FiniteStateMachine *changeState() const; 
      char const *toString() const; 
    }; 

class OFF : public FiniteStateMachine 
    { 
     private:   

     public: 
      OFF(){ } 
      FiniteStateMachine *changeState() const; 
      char const *toString() const; 
    }; 

#endif 

命令は、ONの状態にOFF遷移の状態及びその逆にその関連するすべてのメンバ関数を含んFiniteStateMachine.cppファイルを作成しているされています。

私は反対の状態の新しいインスタンスを返すためにchangeState()関数を記述しようとしましたが、動作したくないようで、どこが間違っているのかわかりません。

私はFiniteStateMachine.cpp

FiniteStateMachine *OFF::changeState() const 
     { 
      FiniteStateMachine *on = new ON; 
      return *on; 
     } 

に次を持つオブジェクトに新しいインスタンスを返すとしようとしていたと、コンパイラは次のエラー を返していましたが変換できない「FiniteStateMachine」の「FiniteStateMachine *」に

同級生は()

OFF::OFF() 
    { 


     FiniteStateMachine *OFF::changeState() const 
      { 
       FiniteStateMachine *on = new ON; 
       return *on; 
      } 

    } 
changeStateを呼び出すだけで、コンストラクタにそれを置く代わりの提案を返します

コンパイラは、それは私が

を書き込むために必要と思われる叩いchangeStateと()さん

よりキーボードの後の間でだ示す「(」トークン

前の宣言でエラー 資格-IDを返します。

FiniteStateMachine *OFF::changeState() const 
    { 
     return new OFF(); 
    } 
+1

ここにコードはありません。宣言だけは表示されません。あなた自身で何か試しましたか?私たちは "宿題をする"プラットフォームではありません。 – Klaus

+0

あなたが試したこととあなたが受け取ったエラーメッセージを教えてください。 "うまくいかない"とは何が間違っているのか説明していません – Caleth

+0

私は昨日やっていたchangeState()関数のコードと、今朝オフコンストラクタのクラスメイトが提案したコードを追加しました。 –

答えて

-1

「状態パターン」を検索してみてください。例:https://sourcemaking.com/design_patterns/state

このデザインパターンは、あなたが求めているものを解決するために作られています。

+0

サンプルコードをどのように使用するのかを教えてください。 –

+1

リンク先のページで 'コード例'の下を見てください。彼が何を求めているのかはほとんど変わらない例があります。 – user2187033

関連する問題