No entiendo estos errores!! (SOLUCIONADO)

Iniciado por MJI, 26 Diciembre 2018, 18:55 PM

0 Miembros y 1 Visitante están viendo este tema.

MJI

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:

Código (cpp) [Seleccionar]
#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.

CalgaryCorpus

#1
El tipo de dato que leerIibros dice devolver  no está bien. Corrijelo.
Aqui mi perfil en LinkedIn, invitame un cafe aqui