es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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;
};
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error que recibiste te está informando que la función push_back() está intentando utilizar el constructor de copia de customer, 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 estructura customer. La clase fstream no tiene un constructor de copia y, por lo tanto, no se puede copiar. Esto hace que el constructor de copia por defecto de customer sea eliminado.

    Para resolver este problema, puedes utilizar un puntero a fstream o declararlo como mutable. En el caso de utilizar un puntero a fstream, debes asegurarte de inicializarlo correctamente y eliminarlo cuando ya no sea necesario.

    Alternativamente, si no necesitas copiar objetos customer, puedes definir customer como no copiable eliminando explícitamente su constructor de copia:

    struct customer {
        // miembros de la estructura
        customer(const customer&) = delete;
        customer& operator=(const customer&) = delete;
    };
    

    Esto evitará que los objetos customer sean copiados o asignados, y necesitarás pasarlos por referencia o puntero en su lugar.

Comments are closed.