我尝试在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 @,
非常@节日@给你和你的家人!
您诚挚的,
简
答案 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
函数,则应该能够找出需要包含哪些标题。