Мой конструктор беспокоит мой конструктор.
Редактировать
На основании обновленного вопроса:
Проблема в том, что конструктор принимает вектор.
Вы получаете доступ к элементам без проверки, существуют ли они.
Таким образом, если какая-либо строка ввода неверна (т. Е. Не все значения присутствуют), то вектор будет не таким большим, как требуется, и приведет к неопределенному поведению.
Если вы измените эти строки:
while(std::getline(lineStream,token,',')) {
input.push_back(token);
}
В:
std::getline(linestream, id, ',');
std::getline(linestream, code, ',');
std::getline(linestream, name, ',');
Затем вызывается конструктор станции с этими параметрами (как было бы неплохо в коде ОО). Тогда бы вы не увидели крушения. Неплохая проверка ошибок.
Примечание:
while( ifs.good()&& std::getline(ifs,line) ) {
Здесь нет необходимости проверять good (). Если поток не в хорошем состоянии, тогда getline () ничего не сделает. Преобразование потока (возвращаемого значения getline ()) в bool также проверяет, является ли состояние потока действительным для дальнейшего чтения и, если нет, преобразуется в false (в конце концов).
// This is more idiomatic.
while(std::getline(ifs,line) ) {
Оригинал
попробуйте это:
struct station
{
std::string id;
std::string code;
std::string station_name;
friend std::istream& operator>>(std::istream& stream, station& data)
{
std::string line;
std::getline(stream, line);
std::stringstream linestream(line);
std::getline(linestream, data.id, ',');
std::getline(linestream, data.code, ',');
std::getline(linestream, data.station_name);
return stream;
}
};
int main()
{
std::ifstream file("station.txt");
std::vector<station> stations;
std::copy(std::istream_iterator<station>(file),
std::istream_iterator<station>(),
std::back_inserter(stations)
);
}