C++ 如何将抽象类类型的变量强制转换为其子类?
我正在为一个方法编写一个接口C++ 如何将抽象类类型的变量强制转换为其子类?,c++,class,oop,interface,abstract-class,C++,Class,Oop,Interface,Abstract Class,我正在为一个方法编写一个接口 void method(Node* node); 该接口包含代码 class Node { public: virtual void init(Node* a) = 0; }; class CNode: public Node { public: void init(Node* a); void init(CNode* a); } 子类具有代码 class Node { public: virtual void i
void method(Node* node);
该接口包含代码
class Node {
public:
virtual void init(Node* a) = 0;
};
class CNode: public Node {
public:
void init(Node* a);
void init(CNode* a);
}
子类具有代码
class Node {
public:
virtual void init(Node* a) = 0;
};
class CNode: public Node {
public:
void init(Node* a);
void init(CNode* a);
}
在代码CNode::init(Node*a)
中,函数将尝试将a
转换为CNode
,然后调用CNode::init(CNode*a)
我正试着用
void CNode::init(Node *a) {
CNode b = dynamic_cast<CNode *>(*a);
}
void CNode::init(节点*a){
CNode b=动态铸件(*a);
}
但是,clang报告了这个错误
“节点”不是指针
如何解决这个问题?应该是:
void CNode::init(Node *a) {
if (CNode *b = dynamic_cast<CNode *>(a))
init(b);
}
void CNode::init(节点*a){
如果(CNode*b=动态(a))
init(b);
}
应该是:CNode*b=dynamic\u cast(a)
您只能在指针上使用动态强制转换
,通过解除对ptr(*a
)的引用,您试图动态强制转换
对象,这就是错误所说的