【发布时间】:2019-10-06 21:06:26
【问题描述】:
我正在为一个方法编写一个接口。
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);
}
在代码CNode::init(Node* a)中,函数会尝试将a转换为CNode,然后调用CNode::init(CNode* a)。
我正在尝试用
来实现它void CNode::init(Node *a) {
CNode b = dynamic_cast<CNode *>(*a);
}
但是clang报这个错误
“节点”不是指针
我该如何解决这个问题?
【问题讨论】:
-
应该是:
CNode* b = dynamic_cast<CNode*>(a); -
你只能在指针上使用
dynamic_cast,通过取消引用你试图dynamic_cast一个对象的ptr(*a),这就是错误的意思
标签: c++ class oop interface abstract-class