Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将抽象类类型的变量强制转换为其子类?_C++_Class_Oop_Interface_Abstract Class - Fatal编程技术网

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
)的引用,您试图
动态强制转换
对象,这就是错误所说的