未能使用向量迭代器,C++
我想迭代一个向量,该向量持有指向Student类型对象的指针。 矢量的声明如下:static vector<Student*> students;
未能使用向量迭代器,C++
无论如何,我想使用的功能pickWinners()的迭代器:
vector<Student*>::iterator p1 = students.begin();
vector<Student*>::iterator p2 = p1;
p2++;
据我了解,P1是一个指针的指针,以学生。但是,当我尝试这个(例如):
*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()中。 我试过
Student *student = students.at(0);
student->print();
和一切都很完美。我在这里很笨,有什么想法? 谢谢!
期望的结果将由
(*p1)->print();
来实现在你的情况下,代码解析为*(p1->print());
,因为operator->
具有比operator*
更高的优先级的,参见例如,the precedence table on wikipedia
P1是一个迭代和对于优先规则,编译器将其解释为:
*(p1->print());
但是你要的是:
(*p1)->print();
你可能想/需要(*p1)->print();
原样,它会分析,如果你会写*(p1->print());
机会是约20:1你真的会更好存储Student
s而不是Student *
s。
一旦你解决了这个问题,你可能想要摆脱Student::print()
,而不是提供std::ostream &operator<<(std::ostream &, Student const &);
。与在的地方,你可以这样做:
std::cout << *p1;
和(例如)打印您的整个阵列工程以类似:
std::copy(students.begin(), students.end(),
std::ostream_iterator<Student>(std::cout, "\n"));
喔,这么愚蠢。谢谢和toda – yotamoo