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

时间:2012-09-28 03:42:55

标签: c++ xalan static-cast

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

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

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

 error: invalid static_cast from type `amxalanc_1_6::XalanElement*' to type `amxalanc_1_6::XalanNode*' 

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

error: cannot convert `amxalanc_1_6::XalanElement*' to `amxalanc_1_6::XalanNode*' in initialization 

XalanElement类定义为:

class XALAN_DOM_EXPORT XalanElement : public XalanNode

文档还显示XalanNode应该派生自XalanElement,正如您在此处所见 - XalanElement Class Reference

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

virtual XalanElement* getDocumentElement() const = 0;

1 个答案:

答案 0 :(得分:2)

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

为了让您的编译器看到XalanElement派生自XalanNode的事实,您需要明确#include定义XalanElement的标头。