Я написал программу, которая должна просто печатать все строки в векторе.
Я использую итератор.
Я получаю ошибку:
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] << " ";
}
Итератор используется для разыменования его, а не для передачи его оператору []. Ваш код должен быть:
void print_courses(){
vector<string>::iterator it;
for(it=courses_.begin();it < courses_.end(); it++)
cout << *it << " ";
}
Оператор [] используется для индексации вектора по номерам.
Итератор указывает на элементы вектора, вы не используете его для индексации в векторе.
for(it=courses_.begin();it < courses_.end(); it++) {
cout << *it << " ";
}
Если у вас есть компилятор C ++ 11, который поддерживает диапазон на основе for
петли, петля может быть сделана немного более краткой
for( auto const& c : courses ) {
cout << c << " ";
}
Ты хочешь сказать: cout << *it << " ";
«это» — итератор, а не индекс.
Вам нужно изменить строку на —
cout << *it <<" " ;
Или же циклически перебирайте индексы вот так —
for(int it=0; courses_.size(); ++it)
cout << this->courses_[it] << " ";
Вы не можете смешать два подхода
Ты имел ввиду:
cout << (*it) << " ";
Это совершенно неправильно. Измените строку:
cout << this->courses_[it] << " ";
к:
cout << *it << " ";
Или измените весь цикл for на:
for(vector<string>::size_type i=0; i<courses_.size(); ++i) {
cout << this->courses_[i] << " ";
}