こんにちは、井田です。
安部さん、回答ありがとうございます。
>前半の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; // インプットクラスへのポインタ
};