3

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

std::ifstream input(s);

这给了我一个错误,说没有匹配的功能。s顺便说一句std::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);
4

1 回答 1

7

Download latest version of GCC, and compile your program with -std=c++0x option. In C++11, stream classes has constructor which takes std::string as argument, and GCC by default doesn't enable C++11, so you need to enable by providing -std=c++0x compiler option.

If you cannot use C++11, then do this:

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

This should compile, both in C++03 and C++11.

于 2012-04-24T17:07:27.003 回答