Como enviar un fichero como parametro en C++

Iniciado por DarkSorcerer, 1 Septiembre 2013, 05:58 AM

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

DarkSorcerer

Hola gente, soy novato en C++, me gustaría que me pudieran ayudar a como mandar por parametro un fichero que abro desde el main.
Lo que quiero es abrir el fichero desde el main, primero comprobar si todo marcha bien, si el fichero no se abrio, el programa avisa que fallo, de lo contrario, manda como parametro a una funcion que se encargara de leer el fichero dentro de un ciclo infinito hasta que no haya mas que extraer del archivo. El fichero tiene este formato

palabra1,palabra2,palabra3,..................................,palabraN

y quiero imprimir cada palabra x cada linea, por eso use getline(fichero,palabra,',');

Pero me salio un error gigante y no pudo funcionar como queria

Les dejo el codigo, estoy usando NetBeans 7.3

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void leerFichero(ifstream fichero){
   
    string palabra;
   
    while(!fichero.eof()){
       
        getline(fichero,palabra,',');
        cout <<palabra;
       
    }
   
}

int main(int argc, char** argv) {
   
    ifstream fichero("personal.txt");
   
    if(fichero.is_open()){
       
        leerFichero(fichero);
       
    }else{
       
        cout <<"\nNo se pudo abrir el fichero";
       
    }

    return 0;
}


eferion

"fichero" es un objeto de tipo "ifstream". El problema que tienes es que getline no es una función válida como tal. Tu quieres hacer "fichero.getline".

Código (cpp) [Seleccionar]

    char palabra[50];

    while(!fichero.eof()){

        fichero.getline(palabra, 50, ',');
        cout <<palabra;

    }


Como has podido comprobar, palabra no puede ser un string, la interfaz getline de ifstream no tiene ninguna sobrecarga que admita un string, tiene que ser un array de tipo char.

amchacon

Cita de: eferion en  1 Septiembre 2013, 11:29 AM
"fichero" es un objeto de tipo "ifstream". El problema que tienes es que getline no es una función válida como tal.
getline también puede usarse como una función, con sobrecarga para strings:
http://www.cplusplus.com/reference/string/string/getline/

El error está en que estás haciendo una copia del fichero para pasarlo a la función, tienes que pasarlo por referencia:

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void leerFichero(ifstream &fichero){

  string palabra;

  while(!fichero.eof()){

      getline(fichero,palabra,',');
      cout <<palabra;

  }

}

int main(int argc, char** argv) {

  ifstream fichero("personal.txt");

  if(fichero.is_open()){

      leerFichero(fichero);

  }else{

      cout <<"\nNo se pudo abrir el fichero";

  }

  return 0;
}
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar