没有用于调用 `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string&)' 的匹配函数

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

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

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;
    }
}      
如果你有 C++11 或更高版本,

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

Ben has 一样,您使用空字符串作为构造函数的第二个参数。如果提供,第二个参数需要是 ios_base::openmode.

类型

所有这些你的代码应该是

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

ofstream entrada(asegurado.c_str());  // C++03 or below

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

您的构造函数 ofstream entrada(asegurado,"");std::ofstream. The second argument needs to be a 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());