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.

El array dentro de la estructura no se copiará correctamente.

Estaba preguntando si alguien podría ayudarme con esto, tengo esta estructura en mi código

”’
struct Gate {
int output[9];
};
”’

Y tenía un vector de esa estructura, pero al agregar a ese vector, lo cual normalmente crearía una copia, se rompió porque es solo una copia superficial, y mi estructura tiene un arreglo.

Entonces intenté solucionar esto creando un constructor de copia personalizado.

”’
struct Gate {
int output[9];
Gate(const Gate &old){
copy(old.output, old.output + 9, output);
}
};
”’

Pero ahora mis inicializadores ya no funcionan, porque están tratando de usar este constructor de copia.

”’
Gate alwaysFirst{{0,0,0,1,1,1,2,2,2}};
Gate alwaysSecond{{0,1,2,0,1,2,0,1,2}};
”’

”’
universal_gate_finder.cpp:39:41: error: cannot convert '<brace-enclosed initializer list>' to 'const Gate&'
39 | Gate alwaysFirst{{0,0,0,1,1,1,2,2,2}};
|
”’

¿Alguien sabe de alguna solución para esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como sugiere el mensaje de error, la lista de inicializadores entre llaves no se puede convertir en una constante Gate&. Una solución alternativa sería modificar la estructura para incluir un constructor que acepte una lista de inicializadores:

    struct Gate {
        int output[9];
    
        Gate(std::initializer_list<int> list) {
            std::copy(list.begin(), list.end(), output);
        }
    };
    

    Con esta modificación, las inicializaciones que proporcionaste deberían funcionar:

    Gate alwaysFirst{0,0,0,1,1,1,2,2,2};
    Gate alwaysSecond{0,1,2,0,1,2,0,1,2};
    

    Ten en cuenta que el uso de llaves en lugar de paréntesis es intencional para invocar el constructor que acepta una lista de inicializadores.

Comments are closed.