c++ - 如何将类型为抽象类的变量转换为其子类?

标签 c++ class oop interface abstract-class

我正在为方法编写接口(interface)。

void method(Node* node);

接口(interface)有代码

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报这个错

'Node' is not a pointer

我该如何解决这个问题?

最佳答案

应该是:

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

关于c++ - 如何将类型为抽象类的变量转换为其子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56221878/

相关文章:

c++ - 没有 std 命名空间

language-agnostic - 通过信息隐藏进行有效封装的绝妙例子?

php - 在 SQL 查询中使用 $object->get_variable() [PHP]

c++ - 模板打印函数 C++

c++ - 带有指针 vector 的 glbufferdata C++

c++ - C++中的Qsort困境

php - 如何在多个文件中扩展 PHP 类并在命名空间中标记每个扩展?

c++ - 正确继承std::string的方法是什么?

java - 从 arrayList 索引访问类字段?

matlab - 未定义函数 'addListener'