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;
}
}
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP