2013-04-22 59 views
0

我工作的一个程序,现在和我得到这个错误:问题Oppening文件写在介绍C++

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 ::出来”,但我不知道怎么换一种说法。

编辑所以我完全忘了在这些线路上的 “打开()” 部分:

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

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

+0

构造函数转到创建对象的位置。 – chris 2013-04-22 00:46:27

回答

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

他可以将行保留在顶部,但稍后调用open()函数提供参数。任一选项都应该可以工作。 – 2013-04-22 00:51:28

+0

@VictorSand是的,我同意。这是另一种选择。将添加到帖子中,谢谢! – taocp 2013-04-22 00:51:59

+0

使用我得到了一个关于“重新声明'std :: ofstream fout_odd'”的错误,但我最终尝试了类似的东西。我评论了顶端的“流派”,并保留了其他代码,现在它似乎可以工作。 谢谢! – user2250690 2013-04-22 00:56:03

1

有开两种方式文件

或者与构造

ofstream fout_odd(odd_name.c_str()); 

打开它,或者用开

fout_odd.open(odd_name.c_str()); 

后调用它,也没有必要通过ios::out因为它是ofstream的默认

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