Xerces.动态转换DOMNode指针到DOMElement返回一个nullptr
Xerces. Dynamic casting DOMNode pointer to DOMElement returns a nullptr
大家好。问题是这样的。我有一个有效的*.xml文件,我尝试使用以下代码解析:
for(XMLSize_t i = 0; i < childrenNodeCount; ++i)
{
DOMNode* currentNode = children->item(i);
if ((currentNode->getNodeType() != 0) && (currentNode->getNodeType() == DOMNode::ELEMENT_NODE))
{
DOMElement* currentElement = dynamic_cast<xercesc::DOMElement*>(currentNode); // !!!
if (XMLString::equals(currentElement->getTagName(), TAG_SectionHeader))
{
// parse this part
}
if (XMLString::equals(currentElement->getTagName(), TAG_SectionBody))
{
// parse this part
}
}
}
程序在执行过程中崩溃,并在第一次"等于"检查时显示SIGILL。调试表明,在动态强制转换之后,currentElement实际上是一个空指针。这里的问题是什么?
使用xlc++, Xerces库2.5,AIX 7编译。
注:同样的代码显然在Windows上运行良好。
UPDATE:将dynamic_cast更改为static_cast可以使代码正常运行。然而,它留下了一些未解之谜。
1)为什么在Windows上使用dynamic_cast而在Unix上不使用时代码运行没有错误?可能是编译器或库版本问题?
2)在这种情况下是否有更好/更干净的方法来强制转换?
您没有提到编译器版本或选项,您是否指定了-qrtti来启用dynamic_cast?
-qrtti=<option> | -qnortti
(C++) Generates runtime type identification (RTTI)
information for the typeid and dynamic_cast
operators. The suboptions are:
all
Generates the information needed for the RTTI
typeid and dynamic_cast operators.
type | typeinfo
Generates the information needed for the RTTI
typeid operator only.
dyna | dynamiccast
Generates the information needed for the RTTI
dynamic_cast operator only.
Default: -qnortti
好,原因如下:Xerces库在默认情况下没有启用RTTI。为了使OP中的机制发挥作用,应该在启用RTTI的情况下重建库。https://issues.apache.org/jira/browse/xercesc - 819
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 检查C++中是否只有一个字符串变量不是 nullptr
- Cocos2d-x TiledMap,在调用 getLayer() 获取碰撞层时返回一个 nullptr?
- 设置一个等于等于NullPtr的变量的变量
- 使用 move-constructor 时将 self 重置为 nullptr 是一个好习惯吗?
- 在为其分配一个新值之前,应将`nullptr`分配给`sTD :: simelod_ptr`
- Xerces.动态转换DOMNode指针到DOMElement返回一个nullptr
- nullptr 不是一个特殊的关键字和 std::nullptr_t 的对象吗?