我正在尝试编写一个程序,询问用户输入文件名,然后打开该文件。当我编译它时,我收到以下错误:
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;
}
}
答案 0 :(得分:12)
std::ofstream
只能用std::string
构建。通常用-std=c++11
(gcc,clang)完成。如果您无权访问c ++ 11,则可以使用c_str()
的{{1}}函数将std::string
传递给const char *
构造函数。
同样,当Ben有pointed 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);
如果您使用c++03
或更低版本,则无法将std::string
传递给ofstream
的构造函数,则需要传递一个c字符串:
ofstream entrada(asegurado.c_str());