Failing to use a vector iterator, c++
我试图迭代一个向量,其中包含指向student类型对象的指针。矢量声明如下:
无论如何,我尝试在函数pickwinners()中使用迭代器:
1 2 3 | vector<Student*>::iterator p1 = students.begin(); vector<Student*>::iterator p2 = p1; p2++; |
据我所知,p1是指向学生的指针。但是当我尝试这个的时候(例如):
1 | *p1->print(); |
我得到下一个错误:
Hire.cpp:192: error: request for member ‘print’ in ‘* p1.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator-> with _Iterator = Student**, _Container = std::vector >’, which is of non-class type ‘Student*’
make: * [Hire.o] Error 1
这对我来说毫无意义。我知道问题不在print()中。我试过
1 2 | Student *student = students.at(0); student->print(); |
一切都很完美。我在这里很笨,有什么想法吗?谢谢!
期望的结果将通过
1 | (*p1)->print(); |
在您的例子中,代码解析为
你可能想要/需要
可能是20:1,你最好是存储
一旦你解决了这个问题,你可能就想摆脱
1 | std::cout << *p1; |
而且(例如)打印整个数组的效果类似于:
1 2 3 | std::copy(students.begin(), students.end(), std::ostream_iterator<Student>(std::cout," ")); |
p1是一个迭代器,对于优先级规则,编译器将其解释为:
1 | *(p1->print()); |
但你想要的是:
1 | (*p1)->print(); |