我写了一个程序,它应该只打印一个向量中的所有字符串。 我正在使用迭代器。 我得到的错误是:
no match for 'operator[]' in '((Students*)this)->Students::courses_[it]'
这是我的代码:
#include <vector>
#include <string>
#include <iostream>
using namespace std;
#include "../include/Courses.h"
class Courses;
class Students {
private:
string name_;
int id_;
public:
vector<string> courses_;
void print_courses(){
vector<string>::iterator it;
for(it=courses_.begin();it < courses_.end(); it++)
cout << this->courses_[it] << " ";
}
答案 0 :(得分:4)
迭代器指向向量的元素,不要用它来索引向量。
for(it=courses_.begin();it < courses_.end(); it++) {
cout << *it << " ";
}
如果你有一个支持基于范围的for
循环的C ++ 11编译器,那么循环可以更简洁一些
for( auto const& c : courses ) {
cout << c << " ";
}
答案 1 :(得分:3)
你想说:cout << *it << " ";
答案 2 :(得分:3)
“it”是迭代器,而不是索引。 您需要将行更改为 -
cout << *it <<" " ;
或者像这样循环遍历索引 -
for(int it=0; courses_.size(); ++it)
cout << this->courses_[it] << " ";
你不能混合两种方法
答案 3 :(得分:2)
迭代器通过解除它来使用,而不是通过将其馈送到operator []。你的代码应该是:
void print_courses(){
vector<string>::iterator it;
for(it=courses_.begin();it < courses_.end(); it++)
cout << *it << " ";
}
operator []用于按数字索引向量。
答案 4 :(得分:1)
你的意思是:
cout << (*it) << " ";
答案 5 :(得分:1)
这是完全错误的。改变这一行:
cout << this->courses_[it] << " ";
到:
cout << *it << " ";
或者,将整个for循环更改为:
for(vector<string>::size_type i=0; i<courses_.size(); ++i) {
cout << this->courses_[i] << " ";
}