En mi base de código, encuentro que dos módulos tienen estructuras con el mismo nombre. Está dando un nombre de error de conflicto. ¿Hay alguna manera de resolverlo sin cambiar el código?¿Cómo resolver dos estructuras con el mismo nombre?
Respuesta
Este es un terrible corte, pero sería posible usar una macro para redefinir el nombre de la estructura, al igual que
// a.h
struct collide {
int a;
};
// b.h
struct collide {
float b;
};
// test.c
#define collide a_collide
#include "a.h"
#undef collide
#include "b.h"
int main(){
struct a_collide a;
struct collide b;
return 0;
}
Probablemente usted desea cambiar el nombre de la estructura de ambas cabeceras para dar errores cuando alguien, inevitablemente, utiliza la estructura equivocada, tal vez en un envoltorio de cabecera como
// wrap_a.h
#define collide a_collide
#include "a.h"
#undef collide
Recuerde UNDEF la macro para que no se consigue sustituciones al azar en todo el código.
No lo diría tan terrible hack. Una vez tuve que incluir dos escaners generados por Lex en mi programa y chocaron con una gran cantidad de símbolos, así que usé un truco similar y funcionó como un amuleto. – qrdl
Creo que lo que más te tiene que preocupar es que alguien se confunda con el cambio de nombre de las estructuras, ya que presumiblemente estos nombres discordantes provienen de una fuente externa. La documentación para llamadas a funciones, etc. ya no coincidiría con los prototipos reales, por lo que cualquier usuario debería tener claro lo que sucedió. –
No se me ocurren realmente buenas ideas. Aquí hay dos no tan buenos:
Si usted es muy afortunado, puede segregar su código para que ningún módulo de todas las necesidades para acceder a ambos tipos de estructura de una sola vez, entonces sólo incluyen la encabezado correcto, y listo. Esto está plagado de peligros y será ser una pesadilla de mantenimiento: cualquiera que venga después tendrá motivo para maldecir su nombre y todos sus descendientes hasta la séptima generación.
Si el código es c89ish podría intentar compilar con un compilador de C++ y envolviendo una o más de las estructuras ofensivas en un espacio de nombres. Esto introduce problemas a partir de todas las pequeñas diferencias exigentes en los dos idiomas (reglas de conversión,
class
como palabra reservada, etc.), por lo que es casi seguro que infringe su solicitud de no cambiar el código.
Buena suerte.
- 1. Dos métodos genéricos con el mismo nombre
- 2. Importación de dos clases con el mismo nombre. ¿Cómo manejar?
- 3. dos funciones con el mismo nombre en I
- 4. Instalar dos módulos de python con el mismo nombre
- 5. Cargue dos módulos Ruby/gemas con el mismo nombre
- 6. Clase con el mismo nombre en dos conjuntos (intencionalmente)
- 7. dos parámetros de tipo con el mismo nombre
- 8. parámetros con el mismo nombre
- 9. ¿Es posible usar dos clases de Java con el mismo nombre y el mismo paquete?
- 10. Definir el mismo bean de resorte dos veces con el mismo nombre
- 11. Dos variables con el mismo nombre y tipo, en dos archivos .c diferentes, compilar con gcc
- 12. Zend dos botones de envío mismo nombre
- 13. cambio de nombre de importación en Java, o importar dos clases con el mismo nombre
- 14. ¿Cómo puede el JPA reconocer dos clases con el mismo nombre pero en paquetes diferentes?
- 15. Mismo nombre de índice para dos tablas
- 16. Dos clases tienen el mismo nombre de tipo xml
- 17. ¿Cómo manejar múltiples cookies con el mismo nombre?
- 18. Cómo elegir entre dos métodos del mismo nombre en Java
- 19. ¿Qué sucede cuando dos anotaciones diferentes tienen el mismo nombre?
- 20. Dos clases tienen el mismo nombre de tipo XML "objectFactory"
- 21. clase parcial con el método mismo nombre
- 22. IllegalAnnotationException: Dos clases tienen el mismo nombre de tipo XML
- 23. Automake y archivos con el mismo nombre
- 24. Dos elementos XML con el mismo ID
- 25. Resolviendo tipos conflictivos para funciones con el mismo nombre en dos bibliotecas externas
- 26. Cómo evitar conflictos de nombres para dos valores enum con el mismo nombre en C++?
- 27. Python: dos paquetes con el mismo nombre; ¿cómo se especifica cuál está cargado?
- 28. ¿Cómo importar dos clases con el mismo nombre en diferentes paquetes?
- 29. ¿Cómo usar dos clases con el mismo nombre en diferentes paquetes?
- 30. En C++, ¿cuándo pueden verse dos variables del mismo nombre en el mismo ámbito?
¿Qué hay de malo en cambiar el código? –
Si pudiera, lo hubiera hecho. :) Lo siento, Neil, en mi caso, eso ni siquiera es una opción. Estoy integrando dos módulos diferentes, ambos fuera de mi control y que están causando. – Jay