没有匹配函数来调用`std :: basic_ofstream <char,std :: char_traits <char =“”>&gt; :: basic_ofstream(std :: string&amp;)'

时间:2016-01-27 19:00:01

标签: c++ string ofstream

我正在尝试编写一个程序,询问用户输入文件名,然后打开该文件。当我编译它时,我收到以下错误:

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

这是我的代码:

using namespace std;

int main()
{ 
    string asegurado;
    cout << "Nombre a agregar: ";
    cin >> asegurado;

    ofstream entrada(asegurado,"");
    if (entrada.fail())
    {
        cout << "El archivo no se creo correctamente" << endl;
    }
}      

2 个答案:

答案 0 :(得分:12)

如果你有C ++ 11或更高版本,

std::ofstream只能用std::string构建。通常用-std=c++11(gcc,clang)完成。如果您无权访问c ++ 11,则可以使用c_str()的{​​{1}}函数将std::string传递给const char *构造函数。

同样,当Benpointed out时,您使用空字符串作为构造函数的第二个参数。如果被提供,则第二个参数必须是ofstream类型。

所有这一切都应该是

ios_base::openmode

ofstream entrada(asegurado); // C++11 or higher

我还建议您阅读:Why is “using namespace std;” considered bad practice?

答案 1 :(得分:1)

您的构造函数ofstream entrada(asegurado,"");std::ofstream的构造函数不匹配。第二个参数必须是ios_base,见下文:

entrada ("example.bin", ios::out | ios::app | ios::binary);
                            //^ These are ios_base arguments for opening in a specific mode.

要使程序运行,您只需从ofstream构造函数中删除字符串文字:

ofstream entrada(asegurado);

请参阅live example here.

如果您使用c++03或更低版本,则无法将std::string传递给ofstream的构造函数,则需要传递一个c字符串:

ofstream entrada(asegurado.c_str());