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

0

Решение

Попробуйте следующее:

 //^^^^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 документация

РЕДАКТИРОВАТЬ: вы также можете попробовать следующее:

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

Другие решения

Есть два способа открыть файл

либо откройте его с помощью конструктора

ofstream fout_odd( odd_name.c_str() );

или вызвать его после с открытым

fout_odd.open( odd_name.c_str() );

нет необходимости проходить ios::out так как это по умолчанию для ofstream

1

Измени эти строки

//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);
0
По вопросам рекламы [email protected]