0

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

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

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

错误:从类型“amxalanc_1_6::XalanElement*”到类型“amxalanc_1_6::XalanNode*”的静态转换无效

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

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

XalanElement 类定义为:

class XALAN_DOM_EXPORT XalanElement : public XalanNode

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

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

virtual XalanElement* getDocumentElement() const = 0;
4

1 回答 1

2

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

为了让您的编译器看到XalanElement派生自您的事实,XalanNode您需要显式#include定义定义XalanElement.

于 2012-09-28T06:07:22.847 回答