Dev - C++ - Ayuda lista de objetos con archivos

 
Vista:

Ayuda lista de objetos con archivos

Publicado por Denis (1 intervención) el 10/10/2012 06:18:04
Buenas gente, tengo un problema, ya que lo que debo hacer es leer de un archivo binario, en el cual tengo alojados objetos. Debo leerlos y pasarlos a mi lista que tengo en memoria.
Yo hice esto nose si sera lo adecuado:

En la parte que aparece en negrita cuando hago la clase nodo de la lista, en el constructor me aparece este error no se a que se debe, si alguien puede ayudarme. Muchas gracias ! . el error es : no matching function for call to 'Voluntario::Voluntario()'

#include <fstream>
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;

class Voluntario{
private:
int historia;
char nombre[50];
char apellido[50];
int edad;
char sexo[1];
char fecha[8];
int cantidadt;
float *medicionest;
int cantidadp;
float *medicionesp;
public:
Voluntario(int,char *,char *,int,char *, char *,int,int);
void cargardatost();
void cargardatosp();
friend class lista;
};

Voluntario::Voluntario(int h,char nom[],char ape[],int e,char sex[], char fec[],int temp,int presion)
{
historia=h;
strcpy(nombre,nom);
strcpy(apellido,ape);
edad=e;
strcpy(sexo,sex);
strcpy(fecha,fec);
cantidadt=temp;
cantidadp=presion;
}

void Voluntario::cargardatost()
{float *temperaturas=new float[cantidadt];
for(int i=0;i<cantidadt;i++)
{medicionest[i]=temperaturas[i];
}
}
void Voluntario::cargardatosp()
{float *presiones=new float[cantidadp];
for(int i=0;i<cantidadp;i++)
{medicionesp[i]=presiones[i];
}
}
class nodo{
private:
Voluntario dato;
nodo *sig;
public:
nodo(Voluntario j);
friend class lista;
};

nodo::nodo(Voluntario j){
dato=j;
sig=NULL;
}

class lista
{ private: nodo *inicio;
public:
void listar();
void agregar_elemento(Voluntario a);
lista();
void quitar_dato(Voluntario a);

};
lista::lista(){inicio=NULL;}


void lista::listar(){
nodo *aux;
aux=inicio;
while (aux!=NULL){
cout<<aux->dato.nombre<<endl;
aux=aux->sig;
}}



void lista::agregar_elemento(Voluntario a){
nodo *nuevo= new nodo(a);

if((inicio==NULL)||(inicio->dato.nombre)>a.nombre){
nuevo->sig=inicio;
inicio=nuevo;}

else{

nodo *aux =inicio;
while((aux->sig!=NULL)&&((aux->sig)->dato.nombre)<a.nombre)
aux=aux->sig;
if(aux->sig!=NULL){
nuevo->sig=aux->sig;
aux->sig=nuevo;}
else {
aux->sig=nuevo;
nuevo->sig=NULL;}
}
}
void lista::quitar_dato(Voluntario a){
nodo *aux;
nodo *ant;
ant=inicio;
aux=inicio;
if(aux->dato.nombre==a.nombre)
{inicio=inicio->sig;
delete aux;}
else{
while((aux->dato.nombre!=a.nombre) && (aux->sig!=NULL))
{ ant=aux;
aux=aux->sig;}

ant->sig=aux->sig;
delete aux;
}
}
int main() {
Voluntario a1(0,"","",0,"","",0,0);
int suma=0;
float prom=0;
lista a;
int tamanio=0;
int c=0;
ifstream leer("C:\\archivob.bin",ios::in|ios::binary);
leer.seekg(0,ios::end);
tamanio=leer.tellg();
c=tamanio/sizeof(Voluntario);
leer.seekg(0);
for(int i=0; i<c;i++)
{ leer.seekg(i*sizeof(Voluntario),ios::beg);
leer.read((char *)&a1,sizeof(Voluntario));
a.agregar_elemento(a1);
}
leer.close();
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder