¿Por qué no puedo usar la función push_back() en el siguiente código de C++?
Estoy tratando de crear un vector de estructuras, que luego utilizaré en otras funciones, para una estructura llamada customer
. Sin embargo, cuando utilizo la función push_back()
, obtengo el siguiente error:
En template: llamada al constructor de copia implícitamente eliminado de ‘customer’
¿Alguien puede explicarme por qué recibo este error, por favor?
Aquí está la parte del código relacionada con mi problema:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct cartitem{
// miembros de la estructura
};
struct customer{
string name;
string arrival_time;
float total_price = 0.0;
vector<cartitem> cart;
fstream mycart;
};
vector<customer> Customers;
static customer newCustomer(string cname, string arrtime){
customer b;
b.name = cname;
b.arrival_time = arrtime;
Customers.push_back(b);
return b;
};
davy.ai
El mensaje de error que recibiste te está informando que la función
push_back()
está intentando utilizar el constructor de copia decustomer
, pero no puede hacerlo porque ha sido eliminado.La razón de esto es porque has declarado una variable miembro de tipo
fstream
en tu estructuracustomer
. La clasefstream
no tiene un constructor de copia y, por lo tanto, no se puede copiar. Esto hace que el constructor de copia por defecto decustomer
sea eliminado.Para resolver este problema, puedes utilizar un puntero a
fstream
o declararlo comomutable
. En el caso de utilizar un puntero afstream
, debes asegurarte de inicializarlo correctamente y eliminarlo cuando ya no sea necesario.Alternativamente, si no necesitas copiar objetos
customer
, puedes definircustomer
como no copiable eliminando explícitamente su constructor de copia:Esto evitará que los objetos
customer
sean copiados o asignados, y necesitarás pasarlos por referencia o puntero en su lugar.