Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/01/2016, 21:24
coyoteazul
 
Fecha de Ingreso: enero-2016
Mensajes: 4
Antigüedad: 8 años, 4 meses
Puntos: 0
Respuesta: Guardar y leer objeto en archivo

Gracias por tus consejos y ayuda. Por desgracia me da error "no match for 'operator<<' in 'historial' << ..." Seguramente lo estoy implementando mal ya que nunca había usado operator de esta forma, solo para el cout y sin declarar funciones especificas

Tuve que pasar la funcion que declaraba los objetos a main porque si no no me dejaba utilizarlos (imagino que los tomaria como variables locales y los borraria al finalizar esa funcion)

Código:
struct referidosRegistro
{
    int numero;
    string bandera;
    string referido;
    string referidoDesde;
    string fechaExpiracion;
    string ultimoClick;
    int clicks;
    float media;
    int fechaExpiracionDias; //calculado

    //funcion que toma un getline declarado en creaClaseReferidoRegistro y lo transforma en un array. Tambien llama a la funcion declarador
    void stringToArray(string lineaReferido);
    //funcion que toma el array de la funcion anterior, convierte los tipos necesarios y los asigna como datos de la clase
    void declarador (string _numero, string _bandera, string _referido, string _referidoDesde, string _fechaExpiracion, string _ultimoClick, string _clicks, string _media);

    ostream& operator<<(ostream& stream) const;
    istream& operator>>(istream& stream);
};

//funcion que inicia la creacion de la clase
void creaClaseReferidoRegistro ()
{
    //pasada a main

}

//funcion que toma un getline de creaClaseReferidoRegistro y lo transforma en un array. Tambien llama a la funcion declarador
void referidosRegistro:: stringToArray(string lineaReferido)
{
    string _lineaReferido = lineaReferido;
    int lastPosicion = 0;
    int posicion = 0;
    string referidoArray[8];
    int i = 0;

    while (posicion != -1)
    {
        posicion = _lineaReferido.find(";",lastPosicion+1);

        if (i==0)
        {
            referidoArray[i] = _lineaReferido.substr(lastPosicion, posicion - lastPosicion);
        }
        else
        {
            referidoArray[i] = _lineaReferido.substr(lastPosicion+1, posicion - lastPosicion -1);
        }
        i++;
        lastPosicion = posicion;
    };

    declarador(referidoArray[0], referidoArray[1], referidoArray[2], referidoArray[3], referidoArray[4], referidoArray[5], referidoArray[6], referidoArray[7]);
};

//funcion que toma el array de la funcion anterior, convierte los tipos necesarios y los asigna como datos de la clase
void referidosRegistro:: declarador (string _numero, string _bandera, string _referido, string _referidoDesde, string _fechaExpiracion, string _ultimoClick, string _clicks, string _media)
{
    numero = atoi(_numero.c_str());
    bandera = _bandera;
    referido = _referido;
    referidoDesde = _referidoDesde;
    fechaExpiracion = _fechaExpiracion;
    ultimoClick = _ultimoClick;
    clicks = atoi(_clicks.c_str());
    media = atof(_media.c_str());
    fechaExpiracionDias = fechaADias(fechaExpiracion);
};


//------------------------------------------------------------------------------------//-----------********
ostream& referidosRegistro::operator<<(ostream& stream) const
{
  stream << numero << bandera  << endl;
  return stream;
}

istream& referidosRegistro::operator>>(istream& stream)
{
  stream >> numero >> bandera;
  return stream; //tuve que declarar algo porque si no marcaba error
}
//------------------------------------------------------------------------------------//-----------********
int main()
{

    ifstream listaReferidos;
    listaReferidos.open("referidos.txt",ios::in);

    referidosRegistro referidoObj[100];
    for (int i=0; i <=99; i++)
    {
        string lineaReferido;

        getline(listaReferidos, lineaReferido);

        referidoObj[i].stringToArray(lineaReferido);
    };

    ifstream historial;
    historial.open("CoAz SaveFile",fstream::out);
    if (historial.good() == 1)
    {
        cout << "buen estado" << endl;

        for (int t=0;t<=5 ;t++)
        {
            historial << referidoObj[t];
        }
    }
    else
    {
        cout << "mal estado"<< endl;
        ofstream fs("CoAz SaveFile");

        for (int t=0;t<=5 ;t++)
        {
            historial << referidoObj[t];
        }
    }
};