二叉树插入()const fpermissive错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树插入()const fpermissive错误相关的知识,希望对你有一定的参考价值。

我必须为我的C ++课程制作自己的BinTree模板类。问题是,在我的教授的例子中,它全部是用const制作的,但是我的代码只有在我把consts取出时编译。在下面的代码中,我总是通过创建新节点在input()方法中收到错误。 Netbeans引发以下错误:

BinTree.hpp:52:73:错误:从'const BinTree :: node *'无效转换为'BinTree :: node *'[-fpermissive]:key {ch},value {val},top {t},left {nullptr},右{nullptr},计数器{1} {}

我希望你能帮助我解决它。

    template <class T> class BinTree {

    struct node;  //forward deklaration

    public:

    BinTree(); 
    ~BinTree();

    int size() const {
        return sz;
    }
    node* find(const char& ) const;
    node* insert(const char&);
    node* getRoot(); 
    void in_Order();
    void level_Order(node*);
    void treeHigh();
    int count(node*);


    private:

    struct node {
        char key;
        T value;
        node* top; 
        node* left;
        node* right;
        volatile int counter;
        explicit node(const char&, const T& = T {}, const node* t = nullptr);

      };
      node* root;
      int sz; 
     };

    template<class T>
    BinTree<T>::BinTree() : root{''}, sz{0} {}

    template<class T>
    BinTree<T>::node::node(const char& ch, const T& val, const node* t)
    : key{ch}, value {val}, top{t}, left{nullptr}, right{nullptr}, counter{1} {}      


    template<class T> typename BinTree<T>::node* 
    BinTree<T>::insert(const char& val) {
    node * n{root};
    node * nn{ new node{val}} ;


    if (root == nullptr) {
        n = nn;
    }

    while (n != nullptr) {

        if (nn->value == n->key) {
            n->counter++;
            delete nn;
            return n;
        }


        if (nn->value < n->key) {

            if (n->left == nullptr) {
                n->left = nn;
                nn->top = n;
                break;
            };
        } else n = n->left;
        continue;

        if (nn->value > n->key) {
            if (n->right == nullptr) {
                n->right = nn;
                nn->top = n;
                break;
            };

        } else n = n->right;
        continue;
    }
          ++sz;
          return nn;;
}
答案
struct node {
    char key;
    T value;
    node* top;  // has to be const node* top
    node* left;
    node* right;
    volatile int counter;
    explicit node(const char&, const T& = T {}, const node* t = nullptr);

以上是关于二叉树插入()const fpermissive错误的主要内容,如果未能解决你的问题,请参考以下文章

从'const char *'到'char *'的无效转换[-fpermissive]; VTK-7.1.1编译错误

将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]

从 'int' 到 'const char*' 的无效转换 [-fpermissive]| (初学者)

报错const passing as ‘this‘ argument discards qualifiers [-fpermissive]的

奇怪的错误,错误:从‘const char*’到‘char’的无效转换[-fpermissive]

error: passing ‘const AppJniCommand’ as ‘this’ argument discards qualifiers [-fpermissive]