El programa es el siguiente:
Código
#include <iostream> #include <string> using namespace std; const int MAX = 20; struct FechaAdquisicion { short dia, mes, anyo; }; struct Libro { string nom, autor; float precio; FechaAdquisicion fecha; }; typedef Libro Vlibros[MAX]; struct Libros { Vlibros libros; int totalibs; }; void Presentacion(void); Libro LeerLibros(void); FechaAdquisicion PedirFecha(void); void MostrarLibrosFecha(Libros libros, FechaAdquisicion fecha); float PrecioLibros(Libros libros, FechaAdquisicion fecha); int main (void) { Libros libros; FechaAdquisicion fecha; libros = LeerLibros(); fecha = PedirFecha(); MostrarLibrosFecha(libros, fecha); cout << "El precio de los libros comprados desde esa fecha hasta la actualizada es de " << PrecioLibros(libros, fecha) << " euros." << endl; return 0; } void Presentacion(void) { cout << "Este programa pide libros al usuario y una fecha, para posteriormente mostrar los libros comprados \n y el dinero gastado en ese dia." << endl << endl; return; } Libro LeerLibros(void) { Libros l; cout << "¿Cuantos libros quieres añadir?: "; cin >> l.totalibs; for(int i = 0; i <= l.totalibs; i++) { cout << "Introduce nombre del libro: "; cin >> l.libros[i].nom; cout << "Introduce nombre del autor: "; cin >> l.libros[i].autor; cout << "Introduce precio del libro(€): "; cin >> l.libros[i].precio; cout << "Introduce la fecha de compra del libro: "<< endl; cout << "\t Dia: "; cin >> l.libros[i].fecha.dia; cout << "\t Mes: "; cin >> l.libros[i].fecha.mes; cout << "\t Anyo: "; cin >> l.libros[i].fecha.anyo; } return l; } FechaAdquisicion PedirFecha(void) { FechaAdquisicion fecha; cout << "Dame fecha: "; cin >> fecha.dia >> fecha.mes >> fecha.anyo; return fecha; } void MostrarLibrosFecha(Libros libros, FechaAdquisicion fecha) { for(int i = 0; i <= libros.totalibs; i++) { if(fecha.dia == libros.libros[i].fecha.dia && fecha.mes == libros.libros[i].fecha.mes && fecha.anyo == libros.libros[i].fecha.anyo) { cout << libros.libros[i].nom << endl; cout << libros.libros[i].autor << endl; cout << libros.libros[i].precio << endl; cout << libros.libros[i].fecha.dia << "/" << libros.libros[i].fecha.mes << "/" << libros.libros[i].fecha.anyo << endl << endl; } } return; } float PrecioLibros(Libros libros, FechaAdquisicion fecha) { int preciototal = 0; for(int i = 0; i <= libros.totalibs; i++) { if(fecha.dia == libros.libros[i].fecha.dia && fecha.mes == libros.libros[i].fecha.mes && fecha.anyo == libros.libros[i].fecha.anyo) { preciototal = preciototal + libros.libros[i].precio; } } return; }
Los errores son del tipo:
int main:
[Error] no match for 'operator=' (operand types are 'Libros' and 'Libro')
LeerLibros:
[Error] request for member 'libros' in 'l.Libros::libros', which is of non-class type 'Vlibros {aka Libro [20]}'
[Error] could not convert 'l' from 'Libros' to 'Libro'
¿Alguien sabe algo, o me podrían ayudar a acabar el programa?
Gracias.
P.D:Los fallos no son de escritura, se ve raro debido al foro.