【问题标题】:Issue Oppening files to write to in intro C++问题 Oppening files to write to intro C++
【发布时间】:2013-04-22 00:45:16
【问题描述】:

我现在正在开发一个程序并且收到此错误:

writeOddEven.cpp:35: error: no match for call to ‘(std::ofstream) (const char*, const std::ios_base::openmode&)’

我以前从未见过,似乎无法找到任何有关在线的信息。在我的程序中,我试图为 2 个文件读入用户指定的名称,然后根据它们是偶数还是奇数将用户指定的整数输入到文件中。到目前为止我的代码是这样的:

#include <iostream>
#include <fstream> 
#include <string>

using namespace std; 

int main()
{
  string odd_name;    //odd number file name
  string even_name;   //even number file name
  ofstream fout_odd;        //fout for odd file
  ofstream fout_even;       //fout for even file


  //Get file names
  cout<<"Enter name of file for odd integers: ";
  getline(cin, odd_name);
  cout<<"Enter name of file for even intgers: ";
  getline(cin, even_name); 

  //Open files;
  fout_odd(odd_name.c_str(), ios::out);             //*ERROR HERE*
  fout_even(even_name.c_str(), ios::out);           //*ERROR HERE*

...

fout_odd.close();
fout_even.close();

我唯一能想到的是我的“ios::out”格式存在某种错误,但我不知道该如何改写。

编辑所以我完全忘记了这些行中的“open()”部分:

  fout_odd(odd_name.c_str(), ios::out);
  fout_even(even_name.c_str(), ios::out);

所以他们应该阅读: fout_odd.open(odd_name.c_str(), ios::out); fout_even.open(even_name.c_str(), ios::out);

【问题讨论】:

  • 构造函数去创建对象的地方。

标签: c++ writetofile


【解决方案1】:

尝试以下方法:

 //^^^^remove these two lines
 ofstream fout_odd;        //fout for odd file
 ofstream fout_even;       //fout for even file


  //Get file names
  cout<<"Enter name of file for odd integers: ";
  getline(cin, odd_name);
  cout<<"Enter name of file for even intgers: ";
  getline(cin, even_name); 

 //Open files;
 //^^you should supply parameters when constructing 
 //the fout_odd and fout_even object
 ofstream  fout_odd(odd_name.c_str(), ios::out); 
 ofstream fout_even(even_name.c_str(), ios::out);  

您可以从C++ File I/O documentation找到更多信息

编辑:您也可以尝试以下方法:

 ofstream fout_odd;        //fout for odd file
 ofstream fout_even;       //fout for even file


  //Get file names
  cout<<"Enter name of file for odd integers: ";
  getline(cin, odd_name);
  cout<<"Enter name of file for even intgers: ";
  getline(cin, even_name); 

 //Open files; provide option when open the files to write
 fout_odd.open(odd_name.c_str(), ios::out); 
 fout_even.open(even_name.c_str(), ios::out);

【讨论】:

  • 他可以将行保持在顶部,但稍后调用 open() 函数提供参数。任何一个选项都应该有效。
  • @VictorSand 是的,我同意。那是另一种选择。将添加到帖子中,谢谢!
  • 使用它我得到一个关于“重新声明'std::ofstream fout_odd'”的错误,但我最终尝试了类似的东西。我注释掉了顶部的“ofstreams”并保留了您的其余代码,它现在似乎可以工作了。谢谢!
  • @user2250690 您可能需要记住,当您使用上述第一种方式时,您必须删除我指出的前两行。很高兴知道它有效。
  • @tacp 我忘了把那些删掉了哈哈,它们是在节目后面的。
【解决方案2】:

有两种打开文件的方式

用构造函数打开它

ofstream fout_odd( odd_name.c_str() );

或者在使用 open 之后调用它

fout_odd.open( odd_name.c_str() );

不需要传递ios::out,因为它是ofstream的默认值

【讨论】:

    【解决方案3】:

    更改这些行

    //Open files;
    fout_odd(odd_name.c_str(), ios::out);             //*ERROR HERE*
    fout_even(even_name.c_str(), ios::out);           //*ERROR HERE*
    

    //Open files;
    fout_odd = ofstream(odd_name.c_str(), ios::out);             
    fout_even = ofstream(even_name.c_str(), ios::out);           
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-02
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      相关资源
      最近更新 更多