如何使用for访问多态向量的元素



我有一个名为StateDefinition的基类,它有以下定义:

class StateDefinition
{
public:
StateDefinition();
virtual bool condition() { return false; }
virtual void reach() {}
};

我有一些派生类,它们覆盖条件和reach方法。我使用std::vector<StateDefinition*> m_stateMachine来存储派生类中的对象。然后我尝试访问以下元素:

for (auto state = m_stateMachine.begin(); state != m_stateMachine.end(); state++)
{
if (!state->condition())
{
state->reach();
break;
}
}

但是这段代码它没有编译,我得到了以下错误:

错误:成员引用基类型"std::_Simple_types::value_type"(也称为"StateDefinitions*"(不是结构或联合

所以我的问题是:如何使用for访问多态向量的元素?

state是一个迭代器,您使用指针的矢量,因此您需要再次取消引用

for (auto state = m_stateMachine.begin(); state != m_stateMachine.end(); state++)
{
if (!(*state)->condition())
{
(*state)->reach();
break;
}
}

其他更简单的方法是:

for (auto state : m_stateMachine) {
if (!state->condition())
{
state->reach();
break;
}
}

最新更新