我有以下类和方法:
//Base class
class Node {
public:
virtual ~Node() {};
Node() {};
private:
// Private things for my implementation.
};
class Element : public Node {
public:
// Returns the name of the element.
const xml::String &name() const {
return eleName;
}
static bool is_Element(const Node *base) {
Element *p = NULL;
p = dynamic_cast<Element*>(base);
return (p!=NULL);
}
static const Element *to_Element(const Node *base) {
return dynamic_cast<Element*>(base);
}
private:
s_namespace eleNamespace;
xml::String &eleName;
// Private things for my implementation.
};
在这里,当我动态转换时,它会显示以下编译错误。如何纠正它?一种方法是简单地删除const
参数。但我认为这不是正确的方法。
oops.cpp:在静态成员函数'static bool xml::Element::is_Element(const xml::Node*)'中:oops.cpp:208:44: 错误:不能dynamic_cast'base'(类型为'const class xml ::Node*') 输入 'class xml::Element*' (转换抛弃了 constness) oops.cpp: 在静态成员函数 'static const xml::Element* xml::Element::to_Element(const xml:: Node*)': oops.cpp:213:47: error: cannot dynamic_cast 'base' (of type 'const class xml::Node*') to type 'class xml::Element*' (conversion cast away constness)