c++ - read - intentando hacer referencia a una función eliminada
read file c++ (2)
En lo que respecta a las respuestas anteriores de paso por referencia en lugar de valor, recuerde que cualquier cambio en la variable en las funciones definidas también afecta a la variable declarada original (en main ()) también.
Estoy tratando de aprender sobre la clase fstream y estoy teniendo algunos problemas. Creé un par de archivos txt, uno con un chiste y el otro con un punchline (joke.txt) y (punchline.txt) solo por leer y mostrar contenido. Le pido al usuario el nombre del archivo y, si lo encuentra, lo abre, borra las marcas y luego lee el contenido. Pero ni siquiera puedo probar lo que lee porque actualmente obtengo errores con respecto a una función eliminada, pero no lo hago. t sabe lo que eso significa
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
el segundo error es exactamente el mismo, pero para la segunda función (displayLastLine ())
y 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
y aquí está mi código:
#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;
}
}
std::ifstream
una función eliminada, siendo el constructor de copia de la clase std::ifstream
.
Si echa un vistazo a la referencia que observa, el constructor de copias no está permitido.
así que en lugar de usar:
void displayAllLines(ifstream joke);
void displayLastLine(ifstream punchline);
Deberías trabajar con llamadas por referencia:
void displayAllLines(ifstream& joke);
void displayLastLine(ifstream& punchline);
El uso de una referencia se comportará como llamar al método con una copia, pero en realidad está operando en el objeto original en lugar de un nuevo objeto construido con copia. Téngalo en cuenta para seguir usando la llamada por referencia.