Как привести переменную с абстрактным классом типа к ее подклассу? - PullRequest
2 голосов
/ 20 мая 2019

Я пишу интерфейс для метода.

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 сообщил об этой ошибке

«Узел» не является указателем

Как я могу решить эту проблему?

1 Ответ

6 голосов
/ 20 мая 2019

Должно быть:

void CNode::init(Node *a) {
    if (CNode *b = dynamic_cast<CNode *>(a))
        init(b);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...