Me enfrenté a este problema hoy y me preguntaba cómo comprobar si un nuevo tipo definido con typedef está realmente definido en alguna parte. Para dar un ejemplo, comencé a usar la biblioteca Xerces-c3 que construí a partir del código fuente y escribí un convertidor xml2text. Pero no pude encontrar el puerto Xerces-c3 en fbsd así que instalé la biblioteca Xerces-c2.Cómo comprobar si un tipo de datos está "definido" con typedef
Cuando traté de volver a compilar el código fuente Me siguiente error:
XML2Text.cc:83: error: cannot declare variable 'handler' to be of abstract type 'XML2TextHandlers'
XML2TextHandlers.h:32: note: because the following virtual functions are pure within 'XML2TextHandlers':
/usr/local/include/xercesc/framework/XMLFormatter.hpp:454: note: virtual void xercesc_2_7::XMLFormatTarget::writeChars(const XMLByte*, unsigned int, xercesc_2_7::XMLFormatter*)
estoy usando la definición siguiente en mi archivo de cabecera para el método writeChars
virtual void writeChars(const XMLByte* const toWrite,
const XMLSize_t count,
XMLFormatter* const formatter);
Comprobé que XMLSize_t no es más que unsigned int declarado con lo siguiente:
#define XERCES_SIZE_T size_t
typedef XERCES_SIZE_T XMLSize_t;
Así que si quiero hacer e un código compatible con ambas bibliotecas ¿cómo lo haré? Una forma en que puedo pensar es comprobar si la versión de la biblioteca y definir XMLSize_t
en consecuencia. ¿Cualquier otra manera?
Gracias,
Shripad
Sí, solucionado el problema haciendo lo siguiente: He encontrado que este tipo declarado en Xerces_autoconf_config.hpp que se introduce en xerces-c3 pero no está en xerces-c2. Lo mismo hizo lo siguiente: #ifndef XERCES_AUTOCONFIG_CONFIG_HPP #define XMLSize_t unsigned int #endif –