Paso de flujos por parametro

Iniciado por darkvidhack, 17 Mayo 2011, 16:21 PM

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

darkvidhack

Hola amigos, tengo un problema con el paso de flujos por parametro, aver si ustedes sabrían solucionarmelo ;), es el siguiente:

Código (cpp) [Seleccionar]

#include "Piloto.h"
#include <fstream>


int main () {


//Cargo los pilotos a memoria
ifstream entrada ("pilotos.csv");
Piloto* *pilotos=new Piloto*[24];      ++++++++++++++++++++++++++++++++++++++++++
       

    for(int i=0;i<24;i++){
    pilotos[i]=new Piloto(entrada);
    }

-------------------------------------------------------------------------------------
Piloto.cpp

Piloto::Piloto() {

Piloto::fromCSV(entrada);

}

--------------------------------------------------------------------------------------
Metodo 'fromCSV'

void Piloto::fromCSV (entrada) {      +++++++++++++++++++++++++++++++++

getline(entrada,nom,';');                +++++++++++++++++++++++++
getline(entrada,ape,';');   ++++++++++++++++++++++++
entrada>>edad;              ++++++++++++++++++++++++++++++++++

}


Las lineas con simbolos '+' son aquellas donde el compilador me detecta fallo, algunos de ellos son:

- 'entrada' has incompleted type
- initializing argument 1 of 'Piloto::Piloto(std::ifstream)'
- 'std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>::__streambuf_type&) [with _CharT = char, _Traits = std::char_traits<char>, std::basic_streambuf<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]' is private


GRACIAS DE ANTEMANO
live and let die

la duda es la base de todo conocimiento

satu

Hola

Creo que es porque en la función "fromCSV" no indicas el tipo de dato que es "entrada"
además  Piloto* *pilotos=new Piloto*[24]; sería Piloto* *pilotos=new *Piloto[24];
y también deberías pasarle "entrada" al constructor ya que desde el constructor llamas a la función con el parámetro

Código (cpp) [Seleccionar]

#include "Piloto.h"
#include <fstream>


int main () {


//Cargo los pilotos a memoria
ifstream entrada ("pilotos.csv");
Piloto* *pilotos=new *Piloto[24];     


    for(int i=0;i<24;i++){
    pilotos[i]=new Piloto(entrada);
    }

-------------------------------------------------------------------------------------
Piloto.cpp

Piloto::Piloto(ifstream &entrada) {

Piloto::fromCSV(entrada);

}

--------------------------------------------------------------------------------------
Metodo 'fromCSV'

void Piloto::fromCSV (ifstream &entrada) {

        getline(entrada,nom,';');
getline(entrada,ape,';');
entrada>>edad;             

}


Eso es lo que he visto, si tienes dudas o lo que sea aquí estamos

Saludos
Breakbeat como forma de vida

darkvidhack

Hola!! Muchas gracias por la respuesta, la encontré antes de leer el post xD, resulta que los flujos siempre se pasan por referencia, como tú bien indicas con el & en los parámetros formales de los métodos, aparte que me faltaba indicar el tipo de dato que era 'entrada', respecto al vector de punteros a objetos, esa linea no me daba ningún fallo.

Muchas Gracias, ya he resolvido la duda ;)


live and let die

la duda es la base de todo conocimiento

satu

Cita de: darkvidhack en 17 Mayo 2011, 22:10 PM
Muchas Gracias, ya he resuelto la duda

De nada, pa eso estamos

:P :P
Breakbeat como forma de vida