表达式必须具有类类型。 - 类对象的向量

时间:2015-01-19 13:21:17

标签: c++ stdvector

有人能指出我正确的方向吗?我收到了上述错误。

std ::在游戏引擎类中声明的类州的向量。

class GameEngine
{....
 private:
 std::vector<State> *m_states;
}

在构造函数中:

m_states = new std::vector<State>;

添加状态功能

void GameEngine::AddState(State *state, bool change)
{
   m_states.push_back (state);
   .....
}

“错误3错误C2228:'。push_back'的左边必须有class / struct / union”

提前致谢。

2 个答案:

答案 0 :(得分:1)

您已将m_states声明为指针...

...
private:
 std::vector<State> *m_states;
...

所以,你必须将它用作指针。

m_states->push_back而不是m_states.push_back

另一方面,我可以看到您的代码中有另一个错误:

您的GameEngine::AddState(State *state, bool change)函数收到State *作为第一个参数,但您的m_states成员是State个对象的向量而不是指针。您必须将声明更改为:

std::vector<States *> *m_states;

建议:尽量避免在C ++中使用指针(*),而是使用 smart_pointers

答案 1 :(得分:0)

由于您正在创建指针,因此需要在将任何内容推回到向量之前取消引用它。

(*m_states).push_back (state);

或者简单地说:

m_states->push_back (state);