使用g ++进行ifstream错误但使用Visual Studio进行编译

时间:2012-04-24 17:04:35

标签: c++ visual-studio compiler-errors g++

我一直在使用Visual Studio来处理我正在进行的项目,尽管它也必须在Linux上使用GCC进行编译。我已经完成了我的项目并且运行正常,但我将文件发送到我的Linux shell并且我收到了一个错误的代码:

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

1 个答案:

答案 0 :(得分:7)

下载最新版本的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中编译。