2012-04-24 118 views
3

我一直在使用Visual Studio作为我正在开发的一个项目,但它也必须在Linux上使用GCC进行编译。我已经完成了我的项目,它运行良好,但我把文件交给我的Linux外壳和我收到一个错误与代码一个简单的一行:用g ++编译ifstream错误,但用Visual Studio编译

std::ifstream input(s); 

这给了我错误说没有匹配的功能。顺便说下,sstd::string。 任何人都可以启发我,为什么这是在Visual Studio下运行,但不是GCC,即使我正在查看ifstream的文档?也许是GCC的旧版本?

编辑:GCC版本是4.2.1确切的错误是:

error: no matching function for call to 'std::basic_ifstream<char, 
std::char_traits<char>>::basic_ifstream(std::string&)' 

编辑2:相关代码:

std::string s = ""; 
if(argc == 2) 
    s = argv[1]; 
else{ 
    std::cout << "Bad filename?" << std::endl; 
    return 1; 
} 
std::ifstream input(s); 
+0

什么是错误? – Joe 2012-04-24 17:05:39

+0

这个:http://ideone.com/w6IJ5正常工作;你应该发布完整的代码。 – 2012-04-24 17:09:50

+0

@RoryYorke更新我认为是唯一相关的代码。 – 2012-04-24 17:14:46

回答

6

下载最新的GCC版本,编译程序使用-std=c++0x选项。在C++ 11中,流类具有以std::string作为参数的构造函数,默认情况下GCC不启用C++ 11,因此需要通过提供-std=c++0x编译器选项来启用。

如果您不能使用C++ 11,那么这样做:

std::ifstream input(s.c_str()); 

这应该编译,无论是在C++ 03和C++ 11。

+0

不是一种选择,我如何更改代码以使其运行? – 2012-04-24 17:08:02

+0

我试图通过调用'open'来更改代码,但它也会出错。 – 2012-04-24 17:09:52

+0

@AustinHenley:看到我更新的答案。另外,当你看到错误,POST IT。请不要让我们猜错。 – Nawaz 2012-04-24 17:10:58