2016-12-11 104 views
-1

我試圖尋找這段代碼中的錯誤。它說的錯誤:[Error] no match for 'operator>>' in 'inputData >> Player[i].AthleteType::firstName「爲線:在我的代碼中,「不匹配」運算符>>'「是什麼意思?

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 AthleteType { 
    string firstName[SIZE]; 
    string lastName[SIZE]; 
    int athleteNumber[SIZE]; 
    string country[SIZE]; 
    int athleteTime[SIZE]; 
}; 

你的編譯器錯誤是告訴你,你不能讀入一個字符串數組,inputData >>的firstName [SIZE] ;.一次一個字符串當然是好的。

如果我同意我的水晶球,我看到你想存儲幾個運動員。這應該使用矢量來完成。

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

這不是測試的代碼,它可能工作,它可能無法正常工作,但它應該向前給你一個合理的路徑。