为什么编译器(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;
答案 0 :(得分:2)
大多数Xalan标头仅对未定义的类使用前向声明,即使它们声明了获取或返回指向这些类的指针的函数。 (这是常见且良好的做法。)
为了让您的编译器看到XalanElement
派生自XalanNode
的事实,您需要明确#include
定义XalanElement
的标头。