2016-03-03 97 views
-2

我正在嘗試讀取文件並將數據存儲在結構數組中。 這是csv(逗號分隔值)格式,帶有4個浮點值和一個字符串。使用ifstream從文件讀取時編譯時出錯

1.2,2.3,3.4,abc 
2.3,3.4,4.5,xyz 

我已經寫了下面這段代碼是相同的,但不過我得到一個編譯錯誤

readfile.c++: In function ‘void read_data()’: 
readfile.c++:38:7: error: no match for ‘operator>>’ (operand types are ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ and ‘data’) 
value >> da[i];//sep_len << sep_wid << pet_len << pet_wid << type; 
    ^
readfile.c++:16:10: note: candidate: std::istream& operator>>(std::istream&, data&) 
istream& operator>>(istream& ins, data& dat) 
     ^
readfile.c++:16:10: note: no known conversion for argument 1 from ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to ‘std::istream& {aka std::basic_istream<char>&}’ 

我的代碼如下。

include<iostream> 
#include<fstream> 
#include<string> 
#include<sstream> 

using namespace std; 
struct data 
{ 
    string sep_len; 
    string sep_wid; 
    string pet_len; 
    string pet_wid; 
    string type; 
}; 

istream& operator>>(istream& ins, data& dat) 
{ 
     return (ins >> dat.sep_len 
       >> dat.sep_wid 
       >> dat.pet_len 
       >> dat.pet_wid 
       >> dat.type); 
} 

void read_data() 
{ 
    struct data da[150]; 
    string line; 
    int i=0; 
    string name="iris.data"; 
    ifstream input(name.c_str()); 

    while((getline(input,line))) 
    { 
      stringstream iss(line); 
      string value; 
      while (getline(iss,value,',')) 
      { 
       value >> da[i];//sep_len << sep_wid << pet_len << pet_wid << type; 
      i++; 
      } 
    } 
} 

int main() 
{ 
    read_data(); 
    return 0; 
} 
+1

你爲什麼不能理解你的編譯器的錯誤信息?這很清楚! –

+0

你打算如何在每個'data'的* five *字符串中分割三個浮點數+一個字符串? – dasblinkenlight

+1

[如何使用逗號分隔值讀寫文本文件/從文本文件中讀取/寫入](http://stackoverflow.com/questions/1474790/how-to-read-write-into-from-text-file-with -逗號分隔值) – Rndp13

回答

1

用於輸入的>>左操作數應該是一個輸入流。但在

value >> da[i]; 

這是一個std::string。也許你想要一些istringstream,或者你的意思是input >> da[i];