问题打开要在intro C ++中写入的文件

时间:2013-04-22 00:45:16

标签: c++ writetofile

我正在制作一个程序,现在收到了这个错误:

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);

3 个答案:

答案 0 :(得分:2)

尝试以下方法:

 //^^^^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);

答案 1 :(得分:1)

有两种方法可以打开文件

用构造函数

打开它
ofstream fout_odd( odd_name.c_str() );

或在打开后调用

fout_odd.open( odd_name.c_str() );

无需传递ios::out,因为它是ofstream

的默认值

答案 2 :(得分:0)

更改这些行

//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);