У меня проблема с вызовом метода с l-значением абстрактного класса. Определение класса:
class SimulatorSequenceItemBase {
public:
SimulatorSequenceItemBase();
virtual ~SimulatorSequenceItemBase();
virtual uint32_t GetResult(uint32_t p_nSite) = 0;
virtual bool MoveNext(SimulatorSequenceItemBase& p_rNext) = 0;
}
SimulatorSequenceItemBase имеет несколько подклассов. Существуют последовательности (для циклов) и элементы для цикла 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 не может быть выделен, так как тип root абстрактный. Но если бы я сделал указатель root, значение не может быть изменено в MoveNext.
Как я могу это исправить? Можно менять любой код, но идея должна оставаться прежней.