conversion from `programa'to non-scalar type `std::string' requested
Os copio también la línea de código: (El error da en la línea 106, en el Lee(nuevo)
Código c++:
Ver original
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; struct programa { string nombre; int fecha; int c; }; void Escribe (const programa &datos){ cout<<"Introduce nombre: "<<flush; cout<<datos.nombre<<endl; cout<<"Introduce fecha del día trabajado: "<<flush; cout<<datos.fecha<<endl; cout<<"Introduce un 1: "<<endl; } void Escribe (const programa lis[], int tam){ for (int i=0; i<tam; i++){ cout<<"Días trabajados por la persona: "<<i+1<<endl; Escribe (lis[i]); } } void Escribe (string nombreFich, const programa &datos){ ofstream salida (nombreFich.c_str(),ios::app); if (salida) { salida<<datos.nombre<<endl; salida<<datos.fecha<<endl; salida.close(); } else cout<<"Error al abrir el archivo"<<nombreFich<<endl; } bool Lee (string nombreFich, programa datos[],int &tam){ ifstream entrada; entrada.open(nombreFich.c_str()); if (entrada){ int i=0; while (getline(entrada>>ws,datos[i].nombre)){ entrada>>datos[i].fecha; entrada>>datos[i].c; i++; } tam=i; entrada.close(); return true; } else cout<<"Error al abrir el fichero"<<nombreFich<<endl; return false; } int Busca (const programa lis[], int tam, string name){ int i=0; bool esta=false; while (i<tam && !esta){ if(name==lis[i].nombre) esta=true; else i++; } if(esta) return i; else return -1; } int ControlEnteros(int limi, int limis, string mensaje){ int valor; do{ cout<<mensaje<<" (valor entre "<<limi<<" y "<<limis<<" : "<<flush; cin>>valor; }while(valor<limi || valor>limis); return valor; } int Menu(){ int dato; cout<<"1. Insertar día de trabajo"<<endl; cout<<"2. Listar datos de trabajo"<<endl; cout<<"3. Mostrar datos de persona"<<endl; cout<<"4. Terminar"<<endl; dato=ControlEnteros(1,4,"Opción"); return dato; } int main(){ const int MAX=100; programa lista[MAX],nuevo; int opcion, t,pos; string nombre; do{ opcion=Menu(); switch(opcion){ case 1:{ Lee(nuevo); Escribe("Trabajo.txt",nuevo); break; } case 2:{ if (Lee("Trabajo.txt",lista,t)) Escribe(lista,t); break; } case 3:{ if (Lee ("Trabajo.txt",lista,t)){ cout<<"Nombre de la persona a buscar: "<<flush; getline(cin>>ws,nombre); pos=Busca(lista,t,nombre); if (pos!=-1) Escribe(lista[pos]); else cout<<"Esa persona no está"<<endl; } break; } } cout<<endl<<endl; }while(opcion!=4); }