こんにちは、井田です。 安部さん、回答ありがとうございます。 >前半のROMに焼くと動かないのと、後半の"Seq1A1"が表示されないのは別問題でしょうか? いえいえ、同じ問題です。 ROMに焼いて動く時もあれば、動かない時もあります。 動かなくなる時に、"Seq1A1"が表示されないで止まっていると思われます。 >・CUI::Create()はstatic宣言されてるメソッドだと思いますが、m_pInputAはCUIのメンバではないの > でしょうか、メンバであればCUI::Create()内でソースのように直接参照できないと思うのですが m_pInputAはCUIのプライベートのポインタで宣言しています。(下記クラス定義参照願います) >・CInputBaseからCInputAを継承する際に SetLimit()をオーバーライドしたりしてませんよね CInputAでSetLimit()をオーバーライドはしていません。(下記クラス定義参照願います) >・CInputBaseとCInputAのGetMaxValue()とGetMinValue()は virtual 付けてないと必ず > CInputBase側のメソッドが呼ばれますが、付けてますか? CInputAのGetMaxValue()とGetMinValue()に「virtual」が付いていなかったので、 付けて確認してみましたが結果は同じでした。(下記クラス定義参照願います) RAMでは起動するが、ROMでは起動しない時もあれば、起動する時もあるのは、 内部ROM、RAM、外部RAMの容量とかに影響するものでしょうか? クラス定義は以下のようにしています。 ≪InputBase.h≫ class CInputBase { friend class CUI; protected: //コンストラクタ CInputBase(); virtual ~CInputBase(); //インターフェイス protected: virtual int GetMaxValue()=0; virtual int GetMinValue()=0; //操作 private: void SetLimit(); }; ≪InputA.h(InputB.h)≫ class CInputReal : public CInputBase { private: friend class CUI; //構築・消滅 CInputReal(); virtual ~CInputReal(); //操作 //オーバーライド // int GetMaxValue(); //変更前 // int GetMinValue(); //変更前 virtual int GetMaxValue(); //変更後 virtual int GetMinValue(); //変更後 }; ≪UI.h≫ class CInputBase; class CInputA; class CInputB; class CUI { //宣言 private: //コンストラクタ CUI(); virtual ~CUI(); //操作 public: static void Create(); static void Delete(); private: //クラス属性 static CInputA* m_pInputA; // インプットクラスへのポインタ static CInputB* m_pInputB; // インプットクラスへのポインタ };