在向量中调用类中的函数的正确方法

时间:2012-11-16 06:37:29

标签: c++ vector

首先,我有一个名为Foo的类,它包含一个虚函数int Foo::getId()

我有一个typedef:typedef std::vector<Foo*> FooList;

然后我定义Foo::FooList *list;并加载此向量。

我想知道如何访问getId()。目前我正在使用list[a].getId();,但编译器一直在说error: class std::vector<Foo*, std::allocator<Foo*> > has no member named getId

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

list->at(a)->getId();

您也可以

list->operator[](a)->getId();

(*(*list)[a]).getId();

或任何组合。

list是一个指针,因此需要取消引用,它包含的指针也是如此。未解除引用的指针上的数组运算符会将a添加到list - 使其指向其他位置。

答案 1 :(得分:2)

您可以使用:

list->at(a)->getId();

另请注意,当您下标Foo::FooList* list时,您的用法会将list[a]视为数组。如果a不为零,那么它将是未定义的行为。此外,您应该考虑在可能的情况下(或值)支持引用,而不是指针。

std::vector<>::at(size_t)访问向量的元素,与operator[](size_t)非常相似。最大的区别是operator[]未选中,而at()将在有范围错误时抛出。

答案 2 :(得分:1)

尝试这种方式:

(*list)[a]->getId()

答案 3 :(得分:1)

你需要几个指针去引用:

(*list)[a]->getId();

(*list)可让您作为对象访问list,因此您可以在其上调用operator[]。并且operator[]返回指向Foo的指针,您可以通过元素选择运算符->调用其方法。您可以在任意位置使用取消引用*或元素选择->。但是您还应该考虑是否需要list作为指针。