Сегодня я столкнулся с этой проблемой и просто задался вопросом, как определить где-то определенный тип, определенный с помощью typedef. Чтобы привести пример, я начал использовать библиотеку Xerces-c3, которую я построил из исходного кода, и написал конвертер xml2text. Но я не смог найти порт Xerces-c3 на fbsd, поэтому была установлена библиотека Xerces-c2.Как проверить, является ли тип данных «определен» с typedef
Когда я попытался перекомпилировать исходный код, который я получил следующую ошибку:
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*)
Я использую следующее определение в моем файле заголовка для метода writeChars
virtual void writeChars(const XMLByte* const toWrite,
const XMLSize_t count,
XMLFormatter* const formatter);
Я проверил, что XMLSize_t не что иное, unsigned int объявлено следующим образом:
#define XERCES_SIZE_T size_t
typedef XERCES_SIZE_T XMLSize_t;
Так что если я хочу мак e код, совместимый с обеими библиотеками, как я это сделаю? Один из способов, который я могу придумать, - проверить, есть ли версия библиотеки и определить XMLSize_t
соответственно. Любым другим путем?
Спасибо,
Shripad
Япа, решить эту проблему, выполнив следующие действия: я обнаружил, что этот тип объявлен в Xerces_autoconf_config.hpp который вводится в xerces-c3, но его нет в xerces-c2. Так было сделано следующее: #ifndef XERCES_AUTOCONFIG_CONFIG_HPP #define XMLSize_t unsigned int #endif –