没有用于调用 `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::string
的 c_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);
如果您使用的是 c++03
或更低版本,那么您不能将 std::string
传递给 ofstream
的构造函数,您将需要传递一个 c 字符串:
ofstream entrada(asegurado.c_str());
我正在尝试编写一个程序,要求用户输入文件名,然后打开该文件。当我编译它时,出现以下错误:
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;
}
}
std::ofstream
只能用 std::string
构造。通常这是用 -std=c++11
(gcc, clang) 完成的。如果您无法访问 c++11,则可以使用 std::string
的 c_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);
如果您使用的是 c++03
或更低版本,那么您不能将 std::string
传递给 ofstream
的构造函数,您将需要传递一个 c 字符串:
ofstream entrada(asegurado.c_str());