Hola a todos, resulta que me da un error al compilar mi programa... dicho error es este:
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);
}