нет совпадения для векторного оператора, использующего cout

Я написал программу, которая должна просто печатать все строки в векторе.
Я использую итератор.
Я получаю ошибку:

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] << " ";
}

-3

Решение

Итератор используется для разыменования его, а не для передачи его оператору []. Ваш код должен быть:

void print_courses(){
vector<string>::iterator it;
for(it=courses_.begin();it < courses_.end(); it++)
cout << *it << " ";
}

Оператор [] используется для индексации вектора по номерам.

2

Другие решения

Итератор указывает на элементы вектора, вы не используете его для индексации в векторе.

for(it=courses_.begin();it < courses_.end(); it++) {
cout << *it << " ";
}

Если у вас есть компилятор C ++ 11, который поддерживает диапазон на основе for петли, петля может быть сделана немного более краткой

for( auto const& c : courses ) {
cout << c << " ";
}
4

Ты хочешь сказать: cout << *it << " ";

3

«это» — итератор, а не индекс.
Вам нужно изменить строку на —

cout << *it <<" " ;

Или же циклически перебирайте индексы вот так —

for(int it=0; courses_.size(); ++it)
cout << this->courses_[it] << " ";

Вы не можете смешать два подхода

3

Ты имел ввиду:

cout << (*it) << " ";
1

Это совершенно неправильно. Измените строку:

cout << this->courses_[it] << " ";

к:

cout << *it << " ";

Или измените весь цикл for на:

for(vector<string>::size_type i=0; i<courses_.size(); ++i) {
cout << this->courses_[i] << " ";
}
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector