AnswerBun.com

cannot convert 'filtro*' to 'FILTRO*{aka fil*}' in assigment (C)

Stack Overflow en español Asked by carlos on December 7, 2020

la cosa esta en que tengo ciertas Estructuras de Datos creadas en una librería, y aunque las funciones para añadir al final de la lista son iguales cambiando los nombres para las diferentes ED es solo con una en concreto (FILTRO) con la que me salta el error. Esto me pasa cuando intento sobrescribir un filtro para que se convierta en otro (Mas detalladamente, la función problemática me da dos fallos:

cannot convert 'filtro*' to 'FILTRO*{aka fil*}' in assigment 

y

cannot convert 'FILTRO*{aka fil*}' to 'filtro*' in assigment)

ED que me causa los problemas:

typedef struct fil {
    COLUMNA * pCol;         //puntero a la columna
    OPERANDO operador;      //operación a realizar
    char *valor;            //valor a aplicar
    struct filtro *next;    //puntero al siguiente filtro
} FILTRO; 

ED con funciones identicas pero que no me causa problemas:

typedef struct etiq {
    char *etiqueta;             //nombre de la etiqueta (texto)
    int cuenta;                 //veces que la etiqueta se repite
    struct etiq * siguiente;    //puntero siguiente etiqueta
} ETIQUETA;

La funcion que hace que salte el error:

void insertarFinalFil(FILTROS* filtros, COLUMNA* col, char operador[], char *valor){
    FILTRO* filtro = generaFiltro(col, operador, valor);
    if(filtros->p == NULL){
        filtros->p = filtro;
    }else{
        FILTRO* puntero = filtros->p;
        while(puntero->next){
            puntero = puntero->next;
        }
        puntero->next = filtro;
    }
} 

Funcion similar que funciona sí que compila:

void insertarFinalEtiq(COLUMNA* columna, char *nombre){
    ETIQUETA* etiq = crearEtiqueta(nombre);
    if(columna->lista == NULL){
        columna->lista = etiq;
    }else{
        ETIQUETA* puntero = columna->lista;
        while(puntero->siguiente){
            puntero = puntero->siguiente;
        }
        puntero->siguiente = etiq;
    }
} 

One Answer

typedef struct fil {
    COLUMNA * pCol;         //puntero a la columna
    OPERANDO operador;      //operación a realizar
    char *valor;            //valor a aplicar
    struct filtro *next;    //puntero al siguiente filtro
    //     ~~~~~~ ERROR
} FILTRO;

Corregido sería:

typedef struct fil {
    COLUMNA * pCol;         //puntero a la columna
    OPERANDO operador;      //operación a realizar
    char *valor;            //valor a aplicar
    struct fil *next;       //puntero al siguiente filtro
} FILTRO;

La cosa esta en que antes de meter las funciones de las ED y las propias ED en librerias no me saltaba ningun fallo

El error se ha producido en el momento en el que has intentado usar next ya que es en ese momento cuando intentas hacer asignaciones entre punteros incompatibles:

void insertarFinalFil(FILTROS* filtros, COLUMNA* col, char operador[], char *valor){
    FILTRO* filtro = generaFiltro(col, operador, valor);
    if(filtros->p == NULL){
        filtros->p = filtro;
    }else{
        FILTRO* puntero = filtros->p;
        while(puntero->next){
            puntero = puntero->next;
        //  ~~~~~~~            ~~~~
        //  FILTRO*            struct filtro*
        }
        puntero->next = filtro;
    //           ~~~~   ~~~~~~
    // struct filtro*   FILTRO*
    }
}

Funcion similar que funciona sí que compila:

Obviamente el compilador no se va a quejar allí donde el código cumple con las reglas de codificación establecidas por el estándar.

Fíjate que en esa segunda función que pones como ejemplo no usas en ningún momento la variable next

Correct answer by eferion on December 7, 2020

Add your own answers!

Related Questions

Como obtener el id de un un grupo de botones con JS?

2  Asked on October 11, 2020 by yasser-chacon

   

Tengo problemas con mi APK de produccion que genere con React Native

0  Asked on October 11, 2020 by jhon-dember-murillo-mendez

   

C# Ayuda, tengo un bug en un juego y no se solucionarlo Unity

2  Asked on October 10, 2020 by juanchi-benitez

     

Ejercicios de Arrays

4  Asked on October 10, 2020 by antonela-alde

   

DataTables 650k muy lento. Server-side funciona?

0  Asked on October 5, 2020 by lautaro

   

Eliminar la ultima coma de un foreach, Laravel

1  Asked on October 5, 2020 by miguel

   

Verificar que un valor existen en un JSON localStorage

1  Asked on October 4, 2020 by carlos-roberto-luna-ochoa

     

Bottom Sheet Android [peekHeight] no funciona en Android 6

0  Asked on October 2, 2020 by luis-eduardo-moreno

         

Cross validation en R

1  Asked on October 2, 2020 by la_roca

   

Cambiar Id de Proyecto en Android Studio

1  Asked on October 1, 2020 by nikjoseba

       

Obtener ultimo registro guardado en una tabla con relación 1 a N

2  Asked on September 30, 2020 by juan-pinzn

   

Problemas entre componentes en Angular

0  Asked on September 29, 2020 by andres-bonilla

         

Comportamiento extraño de páginas aspx

0  Asked on September 27, 2020 by volar-2016

 

Problema con algoritmo en Ruby

2  Asked on September 27, 2020 by diesan-romero

     

¿Cómo desloguerase de conexión ssh con paramiko?

1  Asked on September 25, 2020 by armel-guido

   

Como guardar tarjetas de un cliente MercadoPago sdk Nodejs

0  Asked on September 24, 2020 by facundo-rotger

     

Ask a Question

Get help from others!

© 2022 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, MenuIva, UKBizDB, Menu Kuliner, Sharing RPP, SolveDir