【问题标题】:ifstream error with g++ but compiles with Visual Studiog++ 的 ifstream 错误,但使用 Visual Studio 编译
【发布时间】:2012-04-24 17:04:34
【问题描述】:

我一直在将 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);

【问题讨论】:

  • 这个:ideone.com/w6IJ5 工作正常;您可能应该发布您的完整代码。
  • @RoryYorke 更新了我认为唯一相关的代码。

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


【解决方案1】:

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

【讨论】:

  • 我试图通过调用open 来更改代码,但它也收到了错误。
  • @AustinHenley:查看我的更新答案。此外,当您看到错误时,请发布它。请不要让我们猜测错误。
  • c_str 像魅力一样工作。谢谢你。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
相关资源
最近更新 更多