1

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

我有一个类型定义: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

4 回答 4

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

你也可以做

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

或者

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

或任何组合。

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

于 2012-11-16T06:41:27.707 回答
2

你可以使用这个:

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

另请注意,Foo::FooList* list像. 如果不为零,那么它将是未定义的行为。此外,您应该考虑尽可能偏爱引用(或值),而不是指针。list[a]a

std::vector<>::at(size_t)访问向量的元素,很像operator[](size_t). 最大的区别是operator[]未选中,at()如果有范围错误则会抛出。

于 2012-11-16T06:44:09.810 回答
1

您需要几个指针取消引用:

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

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

于 2012-11-16T06:40:52.573 回答
1

试试这个方法:

(*list)[a]->getId()
于 2012-11-16T06:40:18.037 回答