Error en la compilación! (Solucionado)

Iniciado por MJI, 6 Diciembre 2018, 19:33 PM

0 Miembros y 1 Visitante están viendo este tema.

MJI

Hola, he empezado con la programación hace poco y tengo un pequeño problema en este programa:


#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int SumaYCuenta(ifstream f, float& suma);


int main(void)
{
   int num_elementos = 0;
   float suma = 0;
   ifstream fich_in;
   string nombre;
   
   cout << "Este programa nos calcula la media de los numeros de un fichero en caso
de que exista algun numero dentro de ese fichero" << endl << endl;
   
   cout << "Dame el nombre del fichero: ";
   cin >> nombre;
   
   fich_in.open(nombre);
   
   if (!fich_in)
       cout << "Error abriendo fichero";
   else
   {
       num_elementos = SumaYCuenta(fich_in, suma);
       
       if (num_elementos != 0)
           cout << "La media es: " << suma / num_elementos;
       else
           cout << "El fichero no contenia ningún elemento.";
   }
   
   fich_in.close();
   
   return 0;
}


int SumaYCuenta(ifstream f, float& suma)
{
   int num;
   int contador = 0;
   
   while(f >> num)
   {
       suma = suma + num;
       contador++;
   }
   
   return contador;
}


-----------------------------------------------------------------------------------------
[Error] use of deleted function 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)'

[Error] use of deleted function 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)'

[Error] 'std::ios_base::ios_base(const std::ios_base&)' is private

[Error] within this context

[Error] initializing argument 1 of 'int SumaYCuenta(std::ifstream, float&)'


¿Alguien sabe que puedo hacer?
El programa marca la linea 40

AlbertoBSD

Para evitar esto hay que pasar dicho objeto como referencia.

Código (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int SumaYCuenta(ifstream &f, float& suma);

int main(void) {
int num_elementos = 0;
float suma = 0;
ifstream fich_in;
string nombre;

cout << "Este programa nos calcula la media de los numeros de un fichero en caso de que exista algun numero dentro de ese fichero" << endl << endl;
cout << "Dame el nombre del fichero: ";
cin >> nombre;

fich_in.open(nombre);

if (!fich_in)
cout << "Error abriendo fichero";
else {
num_elementos = SumaYCuenta(fich_in, suma);
if (num_elementos != 0)
cout << "La media es: " << suma / num_elementos;
else
cout << "El fichero no contenia ningún elemento.";
}
fich_in.close();
return 0;
}

int SumaYCuenta(ifstream &f, float& suma) {
int num;
int contador = 0;

while(f >> num)   {
suma = suma + num;
contador++;
}
return contador;
}


El cofigo ya no produce errores, pero tampoco lo probe.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

MJI

Vale, he probado el nuevo código, compila y se ejecuta perfectamente.

Muchas gracias Alberto!