Запись массива структуры в текстовый файл

У меня проблемы с функцией записи файла для моего массива структуры. Я получаю ошибки, что could not convert 'cars[n]' from 'car' to 'std::string {aka std::basic_string<char>}'

Я немного запутался с записью файлов, может быть, кто-то может объяснить или дать мне несколько советов, как заставить мою функцию записи работать?

Мой код:

#include <iostream>
#include <string>
#include <sstream>
#include <stdlib.h>
#include <fstream>

using namespace std;

#define N_CARS 2

struct car{
string model;
int year;
double price;
bool available;
}cars [N_CARS];void writeToFile(ofstream &outputFile, string x )
{
outputFile << x << endl;
}int main ()
{
string mystr;
string mystr2;
string mystr3;
int n;

for (n=0; n<N_CARS; n++)
{
cout << "Enter title: ";
getline (cin,cars[n].model);
cout << "Enter year: ";
getline (cin,mystr);
stringstream(mystr) >> cars[n].year;
cout << "Enter price: ";
getline (cin,mystr2);
stringstream(mystr2) >> cars[n].price;
cout << "Choose availability: ";
getline (cin,mystr3);
stringstream(mystr3) >> cars[n].available;
}
ofstream outputFile;
outputFile.open("bla.txt");
for (n=0; n<N_CARS; n++)
writeToFile(outputFile, cars[n]);
outputFile.close();

system("PAUSE");
return 0;
}

Я правильно понимаю, что outputFile << x << endl; напишет в файл всю мою структуру полей?

1

Решение

Я правильно понял, что outputFile << Икс << епсИ; напишет в файл всю мою структуру полей?

Следующие:

void writeToFile(ofstream &outputFile, string x )
{
outputFile << x << endl;
}

не имеет абсолютно никакого отношения к вашей структуре или вашим полям. Он пишет строку.

Следующие:

writeToFile(outputFile, cars[n]);

вызывает функцию, которая принимает std::stringи пытается передать car к этому. Это не сработает.

У вас есть несколько вариантов:

  • Выведите каждый элемент вашей структуры самостоятельно, используя <<,

  • Перегрузить << оператор для вашей структуры, так что вы можете сделать outputFile << mycar, где << будет вызывать ваш перегруженный оператор. (Это лучший вариант.)

  • Сделайте вашу структуру конвертируемой в std::string, Это повернется и укусит вас позже, потому что в какой-то момент вам неизбежно понадобится прочитать вашу структуру из потока, и тогда вам придется сделать вашу структуру также конвертируемой от строка, которая означает разбор строки, что является уродливым и подверженным ошибкам бизнесом.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]