首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查数据类型是否已用defined“定义”

如何检查数据类型是否已用defined“定义”
EN

Stack Overflow用户
提问于 2010-08-19 06:15:37
回答 2查看 13.9K关注 0票数 17

我今天遇到了这个问题,只是想知道如何检查是否真的在某个地方定义了使用type定义的新类型。举个例子,我开始使用Xerces-c3库,它是我从源代码构建的,并编写了一个xml2text转换器。但是我在fbsd上找不到Xerces-c3端口,所以安装了Xerces-c2库。

当我尝试重新编译我的源代码时,我得到了以下错误:

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只不过是用以下语句声明的无符号整数:

#define XERCES_SIZE_T size_t  
typedef XERCES_SIZE_T XMLSize_t;

那么,如果我想让代码兼容这两个库,我该怎么做呢?我能想到的一种方法是检查库的版本,并相应地定义XMLSize_t。还有别的办法吗?

谢谢,

Shripad

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-19 20:17:57

没有办法直接识别是否定义了typedef。最常用的解决方法是检查定义typedef的文件是否也定义了宏。

例如,"struct tm“类型在time.h中定义。如果您查看您的time.h副本,将在顶部定义一个宏。在VC2010版本中,它是"_INC_TIME“,因此您可以编写

#if !defined(_INC_TIME)
    // Do whatever
#endif

如果你感兴趣的类型定义了一个宏,那么你可以检查一下。

票数 9
EN

Stack Overflow用户

发布于 2010-08-19 06:23:42

不知道如何检查typedefs,但是如果有一个宏可以在文件中用typedefs标识,你可以用#ifdef检查定义语句

http://gcc.gnu.org/onlinedocs/cpp/Ifdef.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3517174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档