boost和xercer XML解析器之间的重载歧义

Overloading ambiguity between boost and xercers XML parser

本文关键字:之间 重载 歧义 xercer XML boost      更新时间:2023-10-16

我有一个传统的C++应用程序(Solaris Sun CC 5.6编译),它使用来自ages的xercers XML parcer v1.6.0。到目前为止一切顺利。

最近另一个第三方库升级迫使我们使用boost库和Sun CC 5.9编译器。

但是我们在集成boost库时开始看到下面的问题,boost include代码和xercer库之间的操作符重载歧义错误;

错误:

/app/home/build/thirdpaty/boost/include/boost/date_time/gregarian_calendar.ipp", line 79, Error: Overloading ambiguity between "operator+ (usigned short, const DOMString&)" and "operator+(int,int)".
"/app/home/build/thirdpaty/boost/include/boost/date_time/gregarian_calendar.ipp", line 79, Error: The operation "DOMString - unsigned short" is illegal.

现在,验证所有名称空间和所有ok。我甚至没有包括命名空间boost;也没有代码从代码引用运算符+(注释了所有'+'代码)

你能建议如何集成boost和xercer xml解析库没有任何歧义错误,任何命名空间黑客,使两者都应该工作?我不能修改xercer库头和boost头以及错误也显示在date_time头文件。你能不能告诉我该怎么做,要确保什么?

我包括以下boost标志:

-DBOOST_TYPEOF_NATIVE -DBOOST_TYPEOF_KEYWORD=__typeof__ -DNO_INLINE_VIRTUALS -DBOOST_ALL_NO_LIB -DFAST_CONVERT -DBOOST_ENABLE_ASSERT_HANDLER

(不知怎的,我包括-DBOOST_NO_DATE_TIME_INLINE,上面的问题解决了,但compiler在cg中给出了segfault)

不显示代码。

我很难听懂这个信息。首先,DOMString没有出现在boost/include/boost/date_time/*中(当然),并且文本 The operation "DOMString - unsigned short" is illegal. 与前面消息中直接显示的模棱两可的重载候选者不一致。

大胆地说,Xerces #为DOMString定义了一个标识符。因此,#define是邪恶的。

您可以通过检查预处理的源来验证这是正在发生的事情。

如果是这种情况,组织您的包含,使Xerces不再干扰(隔离它并最后移动Xerces包含)。也许可以将Xerces配置为不#define