【问题标题】:Write to user specified file in C++在 C++ 中写入用户指定的文件
【发布时间】:2012-02-24 11:43:22
【问题描述】:

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

【问题讨论】:

  • 一般来说,您希望发布问题的最小工作示例,否则人们只能猜测细节。帮助人们帮助你。
  • @luke 我做了,那是myfile.open("example.txt")
  • 这并没有告诉我们 myfile 被声明为什么,也不是产生错误的行。可以这样想:您想向我们展示您的程序的最短版本,以证明您遇到的确切问题。

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


【解决方案1】:

简而言之,是的,您可以指定要以多种不同方式打开和写入的文件。 如果您正在使用 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;
}

【讨论】:

    【解决方案2】:

    如果varstd::string,请尝试:

    myfile.open(var.c_str());
    

    该错误可以准确地告诉您出了什么问题,尽管所命名的模板类型的精度并不能帮助您弄清楚这一点。查看.open() 的参考。它需要一个const char * 作为文件名,以及另一个可选的模式参数。你传递的不是const char *

    【讨论】:

    • 我收到了error: ‘struct std::string’ has no member named ‘c_string’
    • 你想要 .c_str(),而不是 .c_string()。
    • 感谢您纠正我的错误。我必须自动将 str 读取为字符串。 :D
    【解决方案3】:

    错误信息很清楚。它说:basic_ofstream 类(你的文件对象)没有一个名为“open”的成员函数,它接受一个类型为 string 的单个参数(你的 var)。您需要从 string 转到 const char * - 为此,您使用 var.c_str()

    【讨论】:

      【解决方案4】:

      正如错误所说,它试图将参数与字符指针匹配,而 std::string 不是字符指针。然而 std::string::c_str() 将返回一个。

      尝试:

      myfile.open(var.c_str());
      

      【讨论】:

        【解决方案5】:

        open 调用还有第二个参数。它应该像 myfile.open("example.txt", fstream::out)

        【讨论】:

          【解决方案6】:

          您的变量是stringchar[] 还是char*?我认为 open() 方法需要一个 c 风格的字符串,即 char[]char*,所以你需要在传入字符串时调用 .c_str() 方法:

          myfile.open(var.c_str());
          

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2016-02-22
              • 1970-01-01
              • 1970-01-01
              • 2018-12-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多