22

I'm trying to learn about the fstream class and I'm having some trouble. I created a couple of txt files, one with a joke and the other with a punchline (joke.txt) and (punchline.txt) just for the sake of reading in and displaying content. I ask the user for the file name and if found it should open it up, clear the flags then read the content in. but I cant even test what it reads in because I'm currently getting errors regarding a deleted function but I don't know what that means

error 1:

"IntelliSense: function "std::basic_ifstream<_Elem, _Traits>::basic_ifstream(const std::basic_ifstream<_Elem, _Traits>::_Myt &) [with _Elem=char, _Traits=std::char_traits<char>]" (declared at line 818 of "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\fstream") cannot be referenced -- it is a deleted function 

the second error is the exact same but for the 2nd function (displayLastLine())

and error 3:

Error 1 error C2280: 'std::basic_ifstream<char,std::char_traits<char>>::basic_ifstream(const std::basic_ifstream<char,std::char_traits<char>> &)' : attempting to reference a deleted function 

and here's my code:

#include "stdafx.h" #include <string> #include <iostream> #include <fstream> using namespace std; void displayAllLines(ifstream joke); void displayLastLine(ifstream punchline); int main() { string fileName1, fileName2; ifstream jokeFile, punchlineFile; // Desribe the assigned project to the User cout << "This program will print a joke and its punch line.\n\n"; cout << "Enter the name of the joke file (ex. joke.txt): "; cin >> fileName1; jokeFile.open(fileName1.data()); if (!jokeFile) { cout << " The file " << fileName1 << " could not be opened." << endl; } else { cout << "Enter name of punch line file (ex. punchline.txt): "; cin >> fileName2; punchlineFile.open(fileName2.data()); if (!punchlineFile) { cout << " The file " << fileName2 << " could not be opened." << endl; jokeFile.close(); } else { cout << endl << endl; displayAllLines(jokeFile); displayLastLine(punchlineFile); cout << endl; jokeFile.close(); punchlineFile.close(); } } // This prevents the Console Window from closing during debug mode cin.ignore(cin.rdbuf()->in_avail()); cout << "\nPress only the 'Enter' key to exit program: "; cin.get(); return 0; } void displayAllLines(ifstream joke) { joke.clear(); joke.seekg(0L, ios::beg); string jokeString; getline(joke, jokeString); while (!joke.fail()) { cout << jokeString << endl; } } void displayLastLine(ifstream punchline) { punchline.clear(); punchline.seekg(0L, ios::end); string punchString; getline(punchline, punchString); while (!punchline.fail()) { cout << punchString << endl; } } 
3
  • 2
    what have you done to debug your problem? Have you tried writing a minimal working example? Commented May 12, 2014 at 7:57
  • You do call a function that is not supported by the standard. Commented May 12, 2014 at 7:59
  • possible duplicate of error: use of deleted function Commented May 12, 2014 at 8:07

1 Answer 1

41

You do call a deleted function, being the copy constructor of the class std::ifstream.

If you take a look at the reference you notice, that the copy constructor is not allowed.

so instead of using:

void displayAllLines(ifstream joke); void displayLastLine(ifstream punchline); 

you should work with calls by reference:

void displayAllLines(ifstream& joke); void displayLastLine(ifstream& punchline); 

Using a reference will behave just like calling the method with a copy, but in fact you are operating on the original object instead of a new copy-constructed object. Keep that in mind for further use of the call by reference.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.