我一直在尝试编写一个程序,在其中输入学生班级的数据(((常量字符串&first_name,常量字符串&last_name,float gpa,int id)),该程序可以显示哪些学生的gpa高于1.00。遍历向量时遇到麻烦。这是导致我麻烦的函数:
vector<Student> find_failing_students(vector<Student> &students) {
vector<Student> failing_students;
int endVar;
vector<Student>::iterator it;
std::vector<Student>::iterator &forwardmarch = &students.begin();
while(forwardmarch != &students.end())
{
Student temp = Student(forwardmarch->first_, forwardmarch->last_, forwardmarch->gpa_, forwardmarch->id_);
if(temp.getgpa(temp) < 1) {
failing_students.push_back(temp);
forwardmarch++;
}
std::vector<Student>::iterator &forwardmarch = &students.begin();
部分给我以下错误:无效初始化类型为'std :: vector :: iterator&'的非常量引用(又名'__gnu_cxx :: __ normal_iterator>&'},其右值是输入'std :: vector :: iterator *'{aka'__gnu_cxx :: __ normal_iterator> *'}
while循环while(forwardmarch != &students.end())
也给我以下错误:'operator!='不匹配(操作数类型为'std :: vector :: iterator'{aka'__gnu_cxx :: __ normal_iterator>'}和'std :: vector :: iterator *'{aka'__gnu_cxx :: __ normal_iterator> *'})
我尝试了很多事情,也尝试使用更典型的for循环,例如
for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it) {
it->doSomething();
}
我有点困惑,对于C ++来说还很陌生,我们将不胜感激。谢谢!
答案 0 :(得分:6)
这行没有意义:
std::vector<Student>::iterator &forwardmarch = &students.begin();
在左侧,“&”号表示您正在声明对象引用(不是对象)。在右侧,“&”号指示获取指向对象的指针,而不是对象本身。正确的用法是声明一个新对象并直接分配它:
std::vector<Student>::iterator forwardmarch = students.begin();
这是非常基本的东西。阅读主题将是C ++中的指针和引用。