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.

Realizar una conversión de un puntero de tipo void a otro tipo basado en un parámetro de entrada.

Estoy tratando de crear una variable de tipo A o B basada en un parámetro de entrada y asignarle un puntero void casteado.

“`c++
void set_info_param(void* info, bool req)
{

if (req)
struct info *capa_info = (struct info *) info;
else
struct info_old *capa_info = (struct info_old *) info;
… [Usar capa_info]
}

<pre><code><br />Cuando intento compilarlo, obtengo el siguiente error:

</code></pre>

<blockquote>
se esperaba una expresión antes de 'struct'
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “se esperaba una expresión antes de ‘struct'” es un error común de sintaxis en C. En este fragmento de código, aparece en líneas donde una instrucción if-else intenta crear y asignar una variable de tipo struct basada en un parámetro booleano de entrada.

    El problema es que la declaración de la estructura debe venir antes de la asignación de la variable. En este caso, la declaración de cualquiera de las variables capa_info debe venir antes de la instrucción if-else.

    Aquí hay una versión revisada del código para corregir el error:

    void set_info_param(void* info, bool req)
    {
        ...
        struct info *capa_info;
        struct info_old *capa_info_old;
        if (req)
            capa_info = (struct info *) info;
        else
            capa_info_old = (struct info_old *) info;
        ... [Use capa_info or capa_info_old]
    }
    

    Al declarar capa_info y capa_info_old antes de la instrucción if-else, el código se compilará sin errores. Dependiendo de qué camino de la instrucción if-else se tome, una de estas variables recibirá el puntero void convertido y se podrá usar más adelante en la función.

Comments are closed.