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

範囲ベースのループをサポートするC++11コンパイラを使用している場合はfor、ループをもう少し簡潔にすることができます。

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

あなたが言いたい:cout << *it << " ";

于 2012-11-05T16:24:17.153 に答える
3

「it」はイテレータであり、インデックスではありません。行を-に変更する必要があります

cout << *it <<" " ;

または、次のようにインデックスをループします-

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

2つのアプローチを混在させることはできません

于 2012-11-05T16:25:33.683 に答える
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 に答える