用C ++写入用户指定的文件

时间:2012-02-01 19:19:43

标签: c++ file-io compiler-errors

我可以在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 ++的第一周。

7 个答案:

答案 0 :(得分:4)

如果varstd::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)

varstd::string吗?如果是这样,您应该传递var.c_str(),因为没有.open()的变体需要std::string

答案 4 :(得分:0)

您的变量是stringchar[]还是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()