У меня проблема с вызовом метода с l-значением абстрактного класса. Определение класса:с использованием 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);
}
Корня Initally ссылки на корень, и на каждом вызов MoveNext, ссылка должна быть отрегулирована к следующему элементу.
Указанный выше код не работает, поскольку root не может быть выделен, так как тип корня является абстрактным. Но если я сделаю root указателем, то значение не может быть изменено в MoveNext.
Как это исправить? Все в порядке, чтобы изменить любой код, но идея должна оставаться неизменной.
Интересно, кто 'nI' is –
@Armen: Это секретный ник Николая Йосуттиса. ':)' – sbi