У меня проблемы с функцией записи файла для моего массива структуры. Я получаю ошибки, что 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;
напишет в файл всю мою структуру полей?
Я правильно понял, что outputFile << Икс << епсИ; напишет в файл всю мою структуру полей?
Следующие:
void writeToFile(ofstream &outputFile, string x )
{
outputFile << x << endl;
}
не имеет абсолютно никакого отношения к вашей структуре или вашим полям. Он пишет строку.
Следующие:
writeToFile(outputFile, cars[n]);
вызывает функцию, которая принимает std::string
и пытается передать car
к этому. Это не сработает.
У вас есть несколько вариантов:
Выведите каждый элемент вашей структуры самостоятельно, используя <<
,
Перегрузить <<
оператор для вашей структуры, так что вы можете сделать outputFile << mycar
, где <<
будет вызывать ваш перегруженный оператор. (Это лучший вариант.)
Сделайте вашу структуру конвертируемой в std::string
, Это повернется и укусит вас позже, потому что в какой-то момент вам неизбежно понадобится прочитать вашу структуру из потока, и тогда вам придется сделать вашу структуру также конвертируемой от строка, которая означает разбор строки, что является уродливым и подверженным ошибкам бизнесом.
Других решений пока нет …