webentwicklung-frage-antwort-db.com.de

versuch, eine gelöschte Funktion zu referenzieren

Ich versuche, etwas über die Fstream-Klasse zu lernen, und ich habe einige Probleme. Ich habe ein paar txt-Dateien erstellt, eine mit einem Witz und die andere mit einer Pointe (joke.txt) und (punchline.txt), nur um Inhalte einzulesen und anzuzeigen. Ich frage den Benutzer nach dem Dateinamen und wenn er gefunden wird, sollte er sich öffnen, die Flags löschen und dann den Inhalt einlesen. Aber ich kann nicht mal testen, was er liest, da ich momentan Fehler in Bezug auf eine gelöschte Funktion bekomme, aber nicht Ich weiß nicht was das bedeutet

fehler 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

der zweite Fehler ist derselbe, aber für die zweite Funktion (displayLastLine ())

und Fehler 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

und hier ist mein 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;
     }
 }
19
jacksonSD

Sie rufen eine gelöschte Funktion auf, die der Kopierkonstruktor der Klasse std::ifstream ist.

Wenn Sie unter der Referenz betrachten, stellen Sie fest, dass der Kopierkonstruktor nicht zulässig ist.

also anstatt zu verwenden:

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

sie sollten mit Aufrufen nach Referenz arbeiten:

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

Die Verwendung einer Referenz verhält sich genauso wie das Aufrufen der Methode mit einer Kopie. In der Tat verwenden Sie jedoch das ursprüngliche Objekt anstelle eines mit einer Kopie erstellten Objekts. Beachten Sie dies für die weitere Verwendung des Anrufs als Referenz.

37
Theolodis

Beachten Sie, dass bei den vorherigen Antworten von Referenzdurchlauf statt Wert auch die Änderung der Variablen in den definierten Funktionen die ursprüngliche deklarierte Variable (in main ()) beeinflusst.

0
msarafzadeh