Переносимость C ++ от Windows до Linux - PullRequest
0 голосов
/ 15 января 2020

Я успешно использовал следующий код в C ++ на Windows (через CodeBlocks) и недавно пытался использовать этот код на Linux (Ubuntu 18.04) также через CodeBlocks. Кажется, что код хорошо компилируется, но не выполняется при выполнении.

Цель кода - импортировать текстовый файл с разделителями-запятыми в массив.

В Windows и Linux я использую компилятор GNU G CC.

#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <cmath>
#include <iomanip>
#include <ctime>
#include <cstdio>
#include <stdlib.h>

using namespace std;

typedef vector <double> record_t;
typedef vector <record_t> data_t;

istream& operator >> ( istream& ins, record_t& record)
  {

  record.clear();

  string line;
  getline( ins, line );

  stringstream ss( line );
  string field;
  while (getline( ss, field, ',' ))
    {
    stringstream fs( field );
    double f = 0.0;  
    fs >> f;

    record.push_back( f );
    }

 return ins;
  }

//-----------------------------------------------------------------------------

istream& operator >> ( istream& ins, data_t& data )
  {
  data.clear();

  record_t record;
  while (ins >> record)
    {
    data.push_back( record );
    }
return ins;
  }

//-----------------------------------------------------------------------------

int main()
  {
  data_t data;

  ifstream infile( "Import File.txt" );
  infile >> data;

  if (!infile.eof())
    {
    cout << "Unsuccessful Import!\n";
    return 1;
   }

  infile.close();

  cout << "Your file contains " << data.size()-1 << " records.\n";

return 0;
  }

Я проверил наличие необходимых заголовочных файлов в Linux и похоже, это так.

Если я закомментирую EOF, проверьте, что консоль возвращает сообщение

Process returned 49 (0x31)

Фрагмент файла импорта, который завершается с ошибкой в ​​Linux: 1013 *

1138,1139,1137.25,1138.5
1138.25,1138.75,1138.25,1138.5
1138.75,1139,1138.5,1138.75
1138.75,1138.75,1138.25,1138.25
1138.25,1138.25,1137.5,1137.5
1137.5,1138.75,1137.5,1138.5
1138.75,1143.75,1138.75,1143
1143.25,1145.75,1143.25,1144.5
1144.5,1144.75,1143,1143.25
1143.5,1144.5,1143.25,1144.25

Благодарен за любую помощь в поиске решения.

1 Ответ

2 голосов
/ 15 января 2020

То, что return 4321; в main сообщает о неудачном коде возврата в ОС. Только 0 код возврата (он же EXIT_SUCCESS) считается успешным.

Измените его на return 0 или полностью удалите этот оператор return (в C ++ main имеет неявный return 0).

...