访问向量中的类

时间:2015-01-29 20:40:46

标签: c++ vector

这个问题在很多次之前就已经被问过了,但我确实做了答案所说的,而且它们都会出现语法错误。

我尝试了多种方法,这只是我尝试过的最后一种方法。

vector<Ent*>World;
// other code here
for( vector<Ent*>::iterator i = World.begin();
        i != World.end(); ++i )
    {
        World[i]->GetID();
    }

2 个答案:

答案 0 :(得分:5)

语法错误。

World[i]->GetID();

i是一个迭代器,而不是整数索引。

使用

(*i)->GetID();

答案 1 :(得分:3)

对于向量,[]运算符是一个索引访问器,当您想要将元素作为索引(即数字)访问容器时使用,例如:

for( int i = 0;
    i < World.size(); ++i )
{
    World[i]->GetID();
}

另一方面,您正在使用迭代器。迭代器对象本身是指容器的元素,因此您必须更改语法:

for( vector<Ent*>::iterator i = World.begin();
    i != World.end(); ++i )
{
    (*i)->GetID();
}

请注意,迭代器为您提供了一个与元素类似的指针接口,这就是您在访问该成员之前必须首先取消引用它(* i)的原因。