为什么我的程序在Windows上运行正常而不是linux?

时间:2016-04-29 01:16:57

标签: c++ linux

我尝试在Linux Mint Cinnamon VM中编译以下程序并获得许多错误,但它在Windows上运行完全正常。我使用的命令是gcc Main.cpp -o Main

#include "Main.h"
#include <fstream>
#include <iostream>
#include <string>
#include <vector>


using namespace std;
int Main::count = 0;
string festival = "";
std::vector<string> v;

Main::Main()
{
}


Main::~Main()
{
}


int main() {
Main main;
cout << "Please enter the festival name.";
getline(cin, festival);
main.nameFile();
main.readFile();
system("PAUSE");
return 0;
}

void Main::nameFile() {
ifstream inFile;
inFile.open("names.txt");
if (inFile.fail()) {
            cerr << "Error Opening \"names.txt\"" << endl;
            exit(1);
        }
string line;
while (getline(inFile, line)) {
    v.push_back(line);
    ofstream outFile(line + ".txt");
}
}



void Main::readFile()
{
while (v.size() != 0) {
    string name;
    name = v.at(v.size() - 1);
    v.pop_back();
    std::ofstream out(name + ".txt");
    ifstream file;
    file.open("letter.txt");

    string line, nameHolder = "@name@", festivalHolder = "@festival@";
    while (std::getline(file, line))
    {
        std::size_t n_i = line.find(nameHolder);
        if (n_i != std::string::npos)
            line.replace(n_i, nameHolder.size(), name);

        std::size_t f_i = line.find(festivalHolder);
        if (f_i != std::string::npos)
            line.replace(f_i, festivalHolder.size(), festival);

        out << line << '\n';
    }
}
}
 #pragma once
 class Main
{
private: 
static int count;
//static string festival;
public:
Main();
~Main();
void readFile();
void nameFile();
};

以下是我在Linux上遇到的错误:

  

Main.cpp:在函数'int main()'中:
  Main.cpp:30:16:错误:在此范围内未声明'system'   系统( “暂停”);

     

Main.cpp:在成员函数'void Main :: nameFile()'中:
  Main.cpp:39:11:错误:在此范围内未声明'exit'       出口(1);

     

Main.cpp:44:33:错误:没有用于调用'std :: basic_ofstream :: basic_ofstream(std :: basic_string)'的匹配函数      ofstream outFile(line +“。txt”);

     

Main.cpp:44:33:注意:候选人是:
  Main.cpp中包含的文件:2:0:       /usr/include/c++/4.8/fstream:640:7:注意:std :: basic_ofstream&lt; _CharT,_ Traits&gt; :: basic_ofstream(const char *,std :: ios_base :: openmode)[with _CharT = char; _Traits = std :: char_traits; std :: ios_base :: openmode = std :: _ Ios_Openmode]          basic_ofstream(const char * __s,

     

/ usr / include / c ++ / 4.8 / fstream:640:7:注意:参数1从'std :: basic_string'到'const char *'没有已知的转换    /usr/include/c++/4.8/fstream:625:7:注意:std :: basic_ofstream&lt; _CharT,_ Traits&gt; :: basic_ofstream()[with _CharT = char; _Traits = std :: char_traits]              basic_ofstream():__ odream_type(),_ M_filebuf()

     

/ usr / include / c ++ / 4.8 / fstream:625:7:注意:候选人需要0个参数,1个提供
  /usr/include/c++/4.8/fstream:599:11:注意:std :: basic_ofstream :: basic_ofstream(const std :: basic_ofstream&amp;)        class basic_ofstream:public basic_ostream&lt; _CharT,_Traits&gt;

     

/ usr / include / c ++ / 4.8 / fstream:599:11:注意:参数1从'std :: basic_string'到'const std :: basic_ofstream&amp;'没有已知的转换    Main.cpp:在成员函数'void Main :: readFile()':

中      

Main.cpp:56:34:错误:没有匹配函数来调用'std :: basic_ofstream :: basic_ofstream(std :: basic_string)'          std :: ofstream out(name +“。txt”);

     

Main.cpp:56:34:注意:候选人是:
      Main.cpp中包含的文件:2:0:       /usr/include/c++/4.8/fstream:640:7:注意:std :: basic_ofstream&lt; _CharT,_Traits&gt; :: basic_ofstream(const char *,std :: ios_base :: openmode)[with _CharT = char; _Traits = std :: char_traits; std :: ios_base :: openmode = std :: _ Ios_Openmode]          basic_ofstream(const char * __s,

     

/ usr / include / c ++ / 4.8 / fstream:640:7:注意:参数1从'std :: basic_string'到'const char *'没有已知的转换
  /usr/include/c++/4.8/fstream:625:7:注意:std :: basic_ofstream&lt; _CharT,_Traits&gt; :: basic_ofstream()[with _CharT = char; _Traits = std :: char_traits]              basic_ofstream():__ odream_type(),_ M_filebuf()

     

/ usr / include / c ++ / 4.8 / fstream:625:7:注意:候选人需要0个参数,1个提供
  /usr/include/c++/4.8/fstream:599:11:注意:std :: basic_ofstream :: basic_ofstream(const std :: basic_ofstream&amp;)        class basic_ofstream:public basic_ostream&lt; _CharT,_Traits&gt;

     

/ usr / include / c ++ / 4.8 / fstream:599:11:注意:参数1从'std :: basic_string'到'const std :: basic_ofstream&amp;'

没有已知的转换

如果我在Windows上编译+运行,这是我得到的输出:

names.txt中:

  

John Boehner

     巴拉克奥巴马

     

John Doe

     

Jim Shoe

     Bill Ding

letter.txt:

  

Jane Doe

     

213-A室

     

通用旧建筑

     

信息技术学院

     

州立大学编程

     

纽约纽约12345-0987

     

USA

     

收件人:@name @

     

主题:季节的问候:@festival @

     

亲爱的@name @,

     

非常@节日@给你和你的家人!

     

您诚挚的,

     

1 个答案:

答案 0 :(得分:1)

如果没有看到你得到的错误,我只是在猜测它是否会突然出现在我身上。 "PAUSE"函数只是将您的命令交给操作系统。 Linux无法识别system命令。

不要将error: ‘exit’ was not declared in this scope用于跨平台代码,因为不同的操作系统会识别不同的命令。

C++: Equivalent of system("pause"); from Windows in Linux

修改 看看你的错误,我猜你需要在Linux中包含一些额外的头文件。 (not declared和类似的错误通常表示缺少标题。)根据我的经验,一些Microsoft头文件将包含大约一半的标准库头,这可能会使开发人员尝试时维护跨平台代码烦人清除未使用的标头而不检查其他操作系统。

如果您查找application.properties函数,则应该能够找出需要包含哪些标题。