[C ++从Windows到Linux的可移植性

问题描述 投票:0回答:1

我已经在Windows上的C ++中成功使用了以下代码(通过CodeBlocks),并且最近也尝试通过CodeBlocks在Linux(Ubuntu 18.04)上使用相同的代码。该代码似乎可以正常编译,但执行失败。

该代码的目的是将以逗号分隔的数字文本文件导入数组。

在Windows和Linux中,我都使用GNU GCC编译器。

#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 );
    }


  }

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

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

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

  }

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

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

我已经检查了Linux上是否存在必需的头文件,而且似乎是这种情况。

如果我注释掉EOF,则控制台将返回以下消息:>

Process returned 49 (0x31)

非常感谢您找到解决方案的帮助。

我已经在Windows上的C ++中成功使用了以下代码(通过CodeBlocks),并且最近也尝试通过CodeBlocks在Linux(Ubuntu 18.04)上使用相同的代码。代码似乎对...

linux c++11 portability
1个回答
0
投票

return 4321中的main向操作系统报告了失败的返回码。将其更改为return 0

© www.soinside.com 2019 - 2024. All rights reserved.