2013-04-22 38 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);