Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: darkvidhack en 17 Mayo 2011, 16:21 pm



Título: Paso de flujos por parametro
Publicado por: darkvidhack en 17 Mayo 2011, 16:21 pm
Hola amigos, tengo un problema con el paso de flujos por parametro, aver si ustedes sabrían solucionarmelo ;), es el siguiente:

Código
  1. #include "Piloto.h"
  2. #include <fstream>
  3.  
  4.  
  5. int main () {
  6.  
  7.  
  8. //Cargo los pilotos a memoria
  9. ifstream entrada ("pilotos.csv");
  10. Piloto* *pilotos=new Piloto*[24];      ++++++++++++++++++++++++++++++++++++++++++
  11.  
  12.  
  13.    for(int i=0;i<24;i++){
  14.     pilotos[i]=new Piloto(entrada);
  15.    }
  16.  
  17. -------------------------------------------------------------------------------------
  18. Piloto.cpp
  19.  
  20. Piloto::Piloto() {
  21.  
  22. Piloto::fromCSV(entrada);
  23.  
  24. }
  25.  
  26. --------------------------------------------------------------------------------------
  27. Metodo 'fromCSV'
  28.  
  29. void Piloto::fromCSV (entrada) {      +++++++++++++++++++++++++++++++++
  30.  
  31. getline(entrada,nom,';');                +++++++++++++++++++++++++
  32. getline(entrada,ape,';');   ++++++++++++++++++++++++
  33. entrada>>edad;              ++++++++++++++++++++++++++++++++++
  34.  
  35. }

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


Título: Re: Paso de flujos por parametro
Publicado por: satu en 17 Mayo 2011, 20:37 pm
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
  1. #include "Piloto.h"
  2. #include <fstream>
  3.  
  4.  
  5. int main () {
  6.  
  7.  
  8. //Cargo los pilotos a memoria
  9. ifstream entrada ("pilotos.csv");
  10. Piloto* *pilotos=new *Piloto[24];      
  11.  
  12.  
  13.    for(int i=0;i<24;i++){
  14.     pilotos[i]=new Piloto(entrada);
  15.    }
  16.  
  17. -------------------------------------------------------------------------------------
  18. Piloto.cpp
  19.  
  20. Piloto::Piloto(ifstream &entrada) {
  21.  
  22. Piloto::fromCSV(entrada);
  23.  
  24. }
  25.  
  26. --------------------------------------------------------------------------------------
  27. Metodo 'fromCSV'
  28.  
  29. void Piloto::fromCSV (ifstream &entrada) {
  30.  
  31.        getline(entrada,nom,';');
  32. getline(entrada,ape,';');
  33. entrada>>edad;              
  34.  
  35. }
  36.  

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

Saludos


Título: Re: Paso de flujos por parametro
Publicado por: darkvidhack en 17 Mayo 2011, 22:10 pm
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 ;)




Título: Re: Paso de flujos por parametro
Publicado por: satu en 17 Mayo 2011, 22:48 pm
Muchas Gracias, ya he resuelto la duda

De nada, pa eso estamos

:P :P