首先,我有一个名为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
。
感谢您的帮助!
答案 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
作为指针。