【问题标题】:How to cast an variable with type abstract class to its subclass?如何将具有抽象类类型的变量转换为其子类?
【发布时间】: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&lt;CNode*&gt;(a);
  • 你只能在指针上使用dynamic_cast,通过取消引用你试图dynamic_cast一个对象的ptr(*a),这就是错误的意思

标签: c++ class oop interface abstract-class


【解决方案1】:

应该是:

void CNode::init(Node *a) {
    if (CNode *b = dynamic_cast<CNode *>(a))
        init(b);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2020-06-19
    相关资源
    最近更新 更多