boost和xercer XML解析器之间的重载歧义
Overloading ambiguity between boost and xercers XML parser
我有一个传统的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
宏
- 构造函数和转换运算符之间的重载解析
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 你能帮我了解重载一元运算符和二进制运算符之间的区别吗?
- 将重载构造函数传递给类之间的函数
- C++模板和非模板函数之间的重载解析
- C++ 类的构造函数和函数调用运算符 () 重载之间的歧义
- 函数隐藏和重载之间的区别
- 模板流运算符重载错误:引用初始化无效,与basic_istream和basic_ifstream之间的差异有关
- Int64 和 time_t 之间的 C++ 重载歧义
- 函数重载和双精度和长之间的混淆
- 基类和派生类中的模板成员之间的重载解析
- 如何在两个不同的类之间重载"=="运算符?
- 派生类 插入和提取运算符重载以及基类与派生类之间的强制转换
- 模板专用类之间的构造函数重载
- C++ 中多态性和函数重载之间的区别
- 指针之间的运算符重载
- C++:使用结构或枚举重载构造函数之间的区别
- 重载和对象定向之间的关系
- ostream 插入运算符与其非成员重载之间的关系
- c++中按引用传递和按值传递之间重载歧义的实用解决方案