2013-04-10 4 views
0

Я пытаюсь записать данные из моего вектора в новый текстовый файл, создавая новый текстовый файл в процессе, ниже мой код для этого, но im получаю ошибку с < < просто после фс, состояние ошибки не оператор «< <» не соответствует этим операндамЗапись вектора в новый текстовый файл

struct Weather 
{ 
    int a_data; 
    int b_data; 
    double c_data; 
    double d_data; 
    double e_data; 
    double ans_temp; 
}; 


ofstream &operator << (std::ofstream &f, Weather& obj) 
{ 
f<<obj.a_data;///Etc ...code corresponding to dispaly parameters 
return f; 
}; 

int main() 
{ 
    using std::vector; 
    using std::string; 
    using std::getline; 
    using std::cout; 

    vector<Weather> data_weather; 
    string line; 
    ifstream myfile ("weatherdata.txt"); 

    if (myfile.is_open()) 
    { 
    int count = 0; 
    while (getline(myfile, line)) 
    { 
     if (count > 6) 
     { 
      int a, b; 
      double c, d, e; 
      std::istringstream buffer(line); 
      std::string e_as_string; 
      if (buffer >> a >> b >> c >> d >> e_as_string) 
      { 
       if (e_as_string == "---") 
       { 
        sun = 0.0; 
       } 
       else 
       { 
        std::istringstream buffer2(e_as_string); 
        if (!(buffer2 >> sun)) 
        { 
         sun = 0.0; 
        } 
       } 
       Weather objName = {a, b, c, d, e}; 
       data_weather.push_back(objName); 
      } 
     } 
     count++; 
    } 
    myfile.close(); 

    for (auto it = data_weather.begin(); it != data_weather.end(); ++it) 
    { 
     it->ans_temp = it->c_data + it->d_data /2; 
    } 
    for (auto it = data_weather.begin(); it != data_weather.end(); ++it) 
    { 

     std::cout << it->ans_temp << std::endl; 
    } 

    std::ofstream fs("newdata.txt"); 
      for(vector<Weather>::const_iterator it = data_weather.begin(); it != data_weather.end(); ++it) { 
      fs << *it << '\n'; 
     } 
    } 
    else 

    cout << "unable to open file"; 

    scat::pause("\nPress <ENTER> to end the program."); 

    return 0; 
} 
+3

Вы предоставили '' оператор << перегрузки для 'Weather'? –

+0

поделитесь скелином класса Погода. И что вы перегрузили << оператор? – shivakumar

+0

@shivakumar ive обновил вопрос – jaylad

ответ

0

Похоже, вы не перегружены < < оператора.

friend ostream &operator << (std::ostream &f, Weather& obj) 
    { 
    f<<obj.a_data; //Etc ...code corresponding to dispaly parameters 
    return f; 
    } 
+0

ok im new к этому, поэтому приведенный выше код будет размещен непосредственно перед ... std :: ofstream fs ("newdata.txt"); for (vector :: const_iterator it = data_weather.begin(); it! = Data_weather.end(); ++ it) { fs << * it << '\ n'; – jaylad

+0

@jaylad Это определение функции. Поэтому он не может быть в другой функции. Вы можете поставить его перед основным после вашего класса. И вы должны google для перегрузки оператора C++. – 2013-04-10 10:56:21

+0

спасибо, и я сделаю ... ive включил это определение функции в правильное место перед основным, но я все еще получаю первоначальную ошибку, которую я имел раньше? – jaylad

0
ofstream& operator<< (std::ofstream &f, const Weather& obj) 
             ^^^^ 
{ 
    f<<obj.a_data;///Etc ...code corresponding to dispaly parameters 
    return f; 
}; 

или (не рекомендуется)

for(vector<Weather>::iterator it = data_weather.begin(); it != data_weather.end(); ++it) 
        ^^^^ 
{ 
    fs << *it << '\n'; 
}