0

ベクターから新しいテキスト ファイルにデータを書き込もうとしており、その過程で新しいテキスト ファイルを作成しています。これを行うためのコードを以下に示しますが、fs の直後に << でエラーが発生し、エラー状態は演算子 "< ではありません<" はこれらのオペランドに一致します

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

2 に答える 2

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';
}
于 2013-04-10T12:10:41.047 に答える
0

<< 演算子をオーバーロードしていないようです。

friend  ostream &operator << (std::ostream &f, Weather& obj)
    {
    f<<obj.a_data;  //Etc ...code corresponding to dispaly parameters
    return f;
    }
于 2013-04-10T10:50:05.027 に答える