【问题标题】:Why does my program run fine on Windows but not linux? [closed]为什么我的程序在 Windows 上运行良好,但在 linux 上却不行? [关闭]
【发布时间】:2016-04-29 01:16:57
【问题描述】:

我尝试在 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:错误:“系统”未在此范围内声明 系统(“暂停”);

Main.cpp:在成员函数'void Main::nameFile()'中:
Main.cpp:39:11:错误:未在此范围内声明“退出” 退出(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<_chart _ traits>::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<_chart _ traits>::basic_ofstream() [with _CharT = char; _Traits = std::char_traits] basic_ofstream(): __ostream_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&) 类 basic_ofstream : public basic_ostream<_chart>

/usr/include/c++/4.8/fstream:599:11: 注意:没有已知的参数 1 从‘std::basic_string’到‘const std::basic_ofstream&’的转换
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<_chart _traits>::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<_chart _traits>::basic_ofstream() [with _CharT = char; _Traits = std::char_traits] basic_ofstream(): __ostream_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&) 类 basic_ofstream : public basic_ostream<_chart>

/usr/include/c++/4.8/fstream:599:11:注意:没有已知的参数 1 从‘std::basic_string’到‘const std::basic_ofstream&’的转换

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

names.txt:

约翰·博纳

奥巴马

约翰·多伊

吉姆鞋

比尔丁

letter.txt:

简·多伊

213-A 室

普通老建筑

信息技术学院

编程州立大学

纽约 NY 12345-0987

美国

收件人:@name@

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

亲爱的@name@,

给你和你的家人一个非常@festival@!

您的真诚,

【问题讨论】:

  • 您认为提供您收到的错误是否合适,或者您是否认为任何愿意帮助您的人都应该自己发现错误?如果您寻求的帮助是让您的程序编译,那么提供您希望在运行时使用的 names.txt 和 letter.txt 是毫无用处的。
  • 需要查看错误...
  • 我认为,Linux 上没有 PAUSE 命令。

标签: c++ linux


【解决方案1】:

没有看到你得到的错误,我只是猜测这是我跳出来的问题。 system 函数只是将您的命令交给操作系统。 Linux 无法识别"PAUSE" 命令。

不要将system用于跨平台代码,因为不同的操作系统识别不同的命令。

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

编辑: 查看您的错误,我猜您需要在 Linux 中包含一些额外的标头。 (error: ‘exit’ was not declared in this scope 和类似的错误通常表示缺少头文件。)根据我的经验,一些 Microsoft 头文件将包含大约一半的标准库头文件,这会使开发人员尝试清理时维护跨平台代码变得烦人在不检查其他操作系统的情况下查找未使用的标头。

如果您查看not declared 函数,您应该能够找出需要包含哪些标头。

【讨论】:

  • 好的,谢谢,开始
  • 小修正:don't use system,永远
  • @Tas,我同意,但是system 对于你知道你永远不会发布的小型测试程序很有用,这就是为什么我不对它采取强硬路线的原因。如果您想将代码提供给其他人,那么是的,永远不要使用system
猜你喜欢
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-13
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多