Hola, estaba intentando realizar un programa que leyese de teclado libros, y los guardase en un vector, para después comparar unas fechas y sacar el dinero gastado en libros un día.
El programa es el siguiente:
#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.
El tipo de dato que leerIibros dice devolver no está bien. Corrijelo.