我有一个名为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;
}
}