C++ 如何修复不匹配函数ifstream错误?

C++ 如何修复不匹配函数ifstream错误?,c++,C++,我不确定如何修复错误(如下)。有人能帮我吗 顺便说一句:它在VS2012上运行很好,但当我在linux终端上运行时,它会给我这个错误 错误: 图书管理员.cpp:20:错误:没有用于调用的匹配函数 'std::basic_ifstream>::basic_ifstream td::string&,const std:_Ios\u Openmode&)' Library.cpp: bool Librarian::addBooks(string file) { ifstream infile

我不确定如何修复错误(如下)。有人能帮我吗

顺便说一句:它在VS2012上运行很好,但当我在linux终端上运行时,它会给我这个错误

错误:

图书管理员.cpp:20:错误:没有用于调用的匹配函数 'std::basic_ifstream>::basic_ifstream td::string&,const std:_Ios\u Openmode&)'

Library.cpp:

bool Librarian::addBooks(string file)
{
    ifstream infile(file);
    if (!infile) 
    {
        cerr << "File could not be opened." << endl;
        return false;
    }

    for (;;) {
        char s[MAX];
        infile.getline(s, MAX);
        if (infile.eof()) break;
        cout << s << endl;
    }
    return true;
}
bool图书管理员::addBooks(字符串文件)
{
ifstream-infle(文件);
如果(!infle)
{
cerr根据,构造函数在C++11之前不会使用
字符串&
。在C++11之前,它只使用
const char*
。解决问题的最简单方法是:

 ifstream infile(file.c_str());

std::string::c_str()
获取字符串的底层字符指针,以便您可以在构造函数中使用。或者您可以按照注释中的建议使用c++11,但这取决于您的编译器版本(看起来您的编译器不支持它).

@chris我该怎么做?查看编译器选项的文档。很可能是
-std=c++11
@chris我做得对吗?-bash-3.2$g++-std=c++11 BinaryTree.cpp ChildrenBook.cpp Library.cpp Library.cpp Library.cpp Library.cpp main.cpp cc1plus:错误:无法识别的命令行选项“-std=c++11”cc1plus:错误:无法识别的命令行选项“-std=c++11”cc1plus:错误:无法识别的命令行选项“-std=c++11”cc1plus:错误:无法识别的命令行选项“-std=c++11”cc1plus:错误:无法识别的命令行选项“-std=c++11”不一定是这样。试试
-std=c++0x
。在您的GCC版本的文档中应该很清楚。我猜您缺少一个include-VC,可以为您这样做。您有没有#include'd iostream和fstream?或者您可能需要
使用命名空间std;
谢谢!这解决了问题。