我可以在C ++中指定要写入的文件吗?我希望能够输入文件名并写入该文件。当我尝试制作myfile.open("example.txt")
myfile.open(var)
时,我收到了一个很大的错误......
错误:没有匹配函数来调用'std :: basic_ofstream> :: open(std :: string&)' /usr/include/c++/4.2.1/fstream:650:注意:候选人是:void std :: basic_ofstream< _CharT,_Traits> :: open(const char *,std :: _ Ios_Openmode)[with _CharT = char,_Traits = std :: char_traits]
你能对此有所了解或解释我做错了什么吗?我觉得这很简单,因为这是我使用C ++的第一周。
答案 0 :(得分:4)
如果var
是std::string,请尝试:
myfile.open(var.c_str());
错误告诉你究竟出了什么问题,尽管命名的模板类型的精确度无助于使结果清晰。看一下.open()的参考资料。文件名需要const char *
,另一个可选模式参数。你传递的不是const char *
。
答案 1 :(得分:2)
与错误一样,它试图将参数与字符指针匹配,而std :: string不是字符指针。但是std :: string :: c_str()将返回一个。
尝试:
myfile.open(var.c_str());
答案 2 :(得分:2)
简而言之,是的,你可以指定一个文件来打开和写入许多不同的方式。 如果您正在使用fstream并想要写出纯文本,这是一种方式:
#include <string>
#include <fstream>
int main()
{
std::string filename = "myfile.txt";
std::fstream outfile;
outfile.open( filename.c_str(), std::ios::out );
outfile << "writing text out.\n";
outfile.close();
return 0;
}
答案 3 :(得分:0)
var
是std::string
吗?如果是这样,您应该传递var.c_str()
,因为没有.open()
的变体需要std::string
。
答案 4 :(得分:0)
您的变量是string
,char[]
还是char*
?我认为open()方法需要一个c风格的字符串,它是char[]
或char*
,因此当你传递它时,你需要调用字符串上的.c_str()
方法在:
myfile.open(var.c_str());
答案 5 :(得分:0)
打开电话有第二个参数。它应该像myfile.open(“example.txt”,fstream :: out)
答案 6 :(得分:0)
错误信息非常清楚。它说:basic_ofstream
类(您的文件对象)没有名为“open”的成员函数,并且只接受string
类型的单个参数(您的var
)。您需要从string
转到const char *
- 为此,您使用var.c_str()
。