2016-12-11 9 views
-1

私は、このコードの断片で何が間違っているかを調べようとしています。これは、エラーを言う:行の[Error] no match for 'operator>>' in 'inputData >> Player[i].AthleteType::firstName ':"no match for '演算子>>はコード内で何を意味しますか?

inputData >> Player[i].firstName; 

誰かがこれが何を意味するのかを教えてもらえますか?また、これが次のようなファイルからデータを読み取る正しい方法である場合:

Peter Gab 2653 Kenya 127 
Usian Bolt 6534 Jamaica 128 
Other Name 2973 Bangladesh -1 
Bla Bla 5182 India 129 
Some Name 7612 London -1 



//this is the structure 
struct AthleteType 
{ 
    string firstName[SIZE]; 
    string lastName[SIZE]; 
    int athleteNumber[SIZE]; 
    string country[SIZE]; 
    int athleteTime[SIZE]; 
}; 


void readInput(int SIZE) 
{ 
    AthleteType Player[SIZE]; 

    ifstream inputData("Athlete info.txt"); 

    int noOfRecords=0; 

    for (int i=0; i < SIZE; i++, noOfRecords++) 
    { 
     inputData >> Player[i].firstName; 
     inputData >> Player[i].lastName; 
     inputData >> Player[i].athleteNumber; 
     inputData >> Player[i].country; 
     inputData >> Player[i].athleteTime; 
    } 

    for (int i=0; i < noOfRecords; i++) 
    { 
     cout << "First Name: " << Player[i].firstName << endl; 
     cout << "Last Name: " << Player[i].lastName << endl; 
     cout << "Athlete Number: " << Player[i].athleteNumber << endl; 
     cout << "Country: " << Player[i].country << endl; 
     cout << "Athlete Time: " << Player[i].athleteTime << endl; 
     cout << endl; 
    } 
} 
+1

@StoryTeller JFが文字列配列に入力しようとしています。 –

+0

この 'inputData >> Player [i] .firstName;'は 'inputData >> Player.firstName [i];'ではありませんか?それ以外にも構造はかなり無意味に見えます。コードの残りの部分も同様です。 –

+1

@πάνταῥεῖいいね - これは昨日の 'char []'でした! @ Jannatulは非常に急速に進歩している。 –

答えて

3

あなたの試みにはいくつかの問題があります。まず、あなたのstruct

struct AthleteType { 
    string firstName[SIZE]; 
    string lastName[SIZE]; 
    int athleteNumber[SIZE]; 
    string country[SIZE]; 
    int athleteTime[SIZE]; 
}; 

あなたのコンパイラエラーは、文字列の配列、引数inputData >> firstNameの[SIZE]に読み込むことができないことを語っている;.一度に1つの文字列はもちろん大丈夫です。

私がクリスタルボールに仲間入りすれば、いくつかのアスリートを入れたいと思う。これはベクトルを使用して行う必要があります。

vector<Athlete> athletes; 

そして、構造体は、オブジェクトごとに

struct Athlete 
{ 
    string firstName; 
    string lastName; 
    int athleteNumber; 
    string country; 
    int athleteTime; 
}; 

一つアスリートすることができます。

読み込み成功に基づいて読み込みたい入力ファイルから読み込むとき。

while(inputData >> athlete){ 
     athletes.push_back(athlete); 
    } 

あなたはoperator>> (istream&, Athlete&);をオーバーロードすることにより、これを行うことができます。また、同様の仕事をして関数を記述することができます。

istream& readAthlete(istream& in, Athlete& at){ 
    return in >> at.firstName >> at.lastName >> at.athleteNumber >> ... and so on; 
} 

今の読み取り機能を書き込むことができます。これは、コードをテストされていません

vector<Athlete> readInput(string filename){ 
    vector<Athlete> athletes; 
    ifstream inputData(filename); 
    Athlete athlete; 
    while(readAthlete(inputData, athlete)){ 
     athletes.push_back(athlete); 
    } 
    return athletes; 
} 

として、それがうまくいくかもしれない、それが動作しない場合がありますが、それは前方にあなたの合理的なパスを与える必要があります。

関連する問題