抽象クラスの左辺値を持つメソッドの呼び出しに問題があります。クラス定義は次のとおりです。
class SimulatorSequenceItemBase {
public:
SimulatorSequenceItemBase();
virtual ~SimulatorSequenceItemBase();
virtual uint32_t GetResult(uint32_t p_nSite) = 0;
virtual bool MoveNext(SimulatorSequenceItemBase& p_rNext) = 0;
}
SimulatorSequenceItemBase には複数のサブクラスがあります。for ループ内には、シーケンス (for ループ) と項目 for があります。
次を使用して、シーケンスをループしてステップをカウントしたい:
uint32_t nI = 0;
SimulatorSequenceItemBase root = forSeq; // forSeq is an instance of a subclass of SimulatorSequenceItemBase
while(root.MoveNext(root))
{
++nI;
std::cout << root.GetResult(0);
}
ルートは最初にルートを参照し、MoveNext を呼び出すたびに、参照を次の要素に調整する必要があります。
ルートのタイプが抽象的であるため、ルートを割り当てることができないため、上記のコードは機能しません。しかし、root をポインターにすると、MoveNext で値を変更できなくなります。
どうすればこれを修正できますか? コードを変更しても問題ありませんが、考え方は同じである必要があります。