BST中的动态投射节点

时间:2013-04-30 00:38:52

标签: c++ templates casting

我有一个班级

class Para{
public:
    int wrt, liczbaWystapien;
    Para(int wrt, int liczbaWystapien){
        this->wrt = wrt;
        this->liczbaWystapien = liczbaWystapien;
    }...

BST树模板,其中我有insert_helper函数和带有动态强制转换的错误

void insertHelper(Node<T>* node, T value){
        if(value < node->key){
            if(node->left == NULL)
                node->left = new Node<T>(value);
            else
                insertHelper(node->left, value);
        }
        else if(value > node->key){//bez duplikatow bad z duplikatami
            if(node->right == NULL)
                node->right = new Node<T>(value);
            else
                insertHelper(node->right, value);
        }else if (is_same<T, Para*>::value){
            //cout<<"PARA fsaifhsaiohfoasihfaoih"<<endl;
            dynamic_cast<BST<Para*>>(node)->key->wrt++;//HERE IS ERROR
        }
    }

树的内容是:

BST<Para*>* bstLicznosc;

如何纠正这种动态演员(我需要任何类型的演员)?

编辑:

当我使用时:

dynamic_cast<BST<Para*>*>(node)->key->wrt++;

我明白了:

Error   4   error C2683: 'dynamic_cast' : 'Node<T>' is not a polymorphic type   

1 个答案:

答案 0 :(得分:0)

您只能dynamic_cast引用或指针类型,即BST<Para*>&BST<Para*>*,而不是BST<Para*>

在您的情况下,BST<Para*>*是正确的,因为node是指针。

此外,node必须是多态类型,即它必须具有虚函数(析构函数是一个很好的候选者)。