我正在制作一个程序,现在收到了这个错误:
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);
答案 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);