15/01/2016, 21:24
|
| | Fecha de Ingreso: enero-2016
Mensajes: 4
Antigüedad: 9 años 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];
}
}
};
|