-3

我写了一个程序,它应该只打印向量中的所有字符串。我正在使用迭代器。我得到的错误是:

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

6 回答 6

4

迭代器指向向量的元素,您不使用它来索引向量。

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

如果您有一个支持基于范围的for循环的 C++11 编译器,则可以使循环更简洁一些

for( auto const& c : courses ) {
  cout << c << " ";
}
于 2012-11-05T16:24:57.647 回答
3

"it" 是一个迭代器,而不是一个索引。您需要将行更改为 -

cout << *it <<" " ;

或者像这样循环遍历索引 -

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

你不能混合这两种方法

于 2012-11-05T16:25:33.683 回答
3

你想说:cout << *it << " ";

于 2012-11-05T16:24:17.153 回答
2

迭代器通过取消引用来使用,而不是通过将其提供给 operator[]。您的代码应该是:

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

operator[] 用于按数字索引向量。

于 2012-11-05T16:25:16.703 回答
1

你的意思:

cout << (*it) << " ";
于 2012-11-05T16:24:25.883 回答
1

这是完全错误的。换行:

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

至 :

cout << *it << " ";

或者,将整个 for 循环更改为:

for(vector<string>::size_type i=0; i<courses_.size(); ++i) {
  cout << this->courses_[i] << " ";
}
于 2012-11-05T16:24:50.883 回答