为什么我不能将一个 Xalan 类的static_cast使用到它的基类?

Why can't I use a static_cast from one Xalan class to its base class?

本文关键字:cast 基类 static 类的 不能 Xalan 一个 为什么      更新时间:2023-10-16

为什么编译器(g++)抱怨这行代码?

    XalanNode *docElement = static_cast<XalanNode*> (docBuilder_->getDocument()->getDocumentElement());

我从编译器得到的错误是:

 错误:从类型"amxalanc_1_6::XalanElement*"到类型"amxalanc_1_6::XalanNode*"的static_cast无效 

如果没有static_cast,编译器将打印:

错误:无法在初始化中将"amxalanc_1_6::XalanElement*"转换为"amxalanc_1_6::XalanNode*" 

XalanElement 类定义为:

class XALAN_DOM_EXPORT XalanElement : public XalanNode

文档还显示 XalanNode 应该派生自 XalanElement,正如你在这里看到的 - XalanElement 类参考。

在 XalanDocument.hpp 中,getDocumentElement() 的方法签名是:

virtual XalanElement* getDocumentElement() const = 0;

大多数 Xalan 标头只对它们未定义的类使用前向声明,即使它们声明的函数接受或返回指向这些类的指针。(这是常见且良好的做法。

为了让编译器看到XalanElement是从XalanNode派生的事实,您需要显式#include定义XalanElement的标头。