错误:绑定到discards限定符类型的引用

时间:2018-03-17 15:08:22

标签: c++ eclipse binding linked-list

我很抱歉,我知道以前曾经问过,但即使我尝试阅读所有其他类似问题的答案,我也无法理解我的错误。 我正在使用Eclipse,我使用C ++进行编程,并且我正在尝试使用模板创建链接列表

我使用的节点类对我的链表有用,我有这个功能规范:

template <class item>
void list_insert(node<item>*& head, const item&e);

奥莱特。我想在列表类中使用此函数,我可以这样:

template <class item>
class list{
public:
    list(){head=NULL;}

    void set_head(node<item>*h){head=h;}
    node<item>*& get_head(){return head;}
    const node<item>* get_head()const{return head;}

    bool empty()const{return head==NULL;} // is the list empty?

    void insert(const item&e){list_insert(head,e);} //ERROR GETS HERE!
    void print(); // print the list clockwise
    void printback(); //print it counterclockwise

private:
    node<item>* head;
};

我这样做,所以我可以像这样实现list_insert:

template <class item>
void list_insert(node<item>*& head, const item& e){
    head= new node<item>(e,head);
}

现在,在最后一段代码中我收到了这个错误:

错误:将'const int'绑定到'int&amp;'类型的引用丢弃限定词

我已经读过,基本上编译器告诉我''ehi,如果你这样做,你想要的const条件会被违反,所以我给你一个错误'',好吧,但我仍然不明白实际错误,或者,无论如何,它背后的原因是什么。

另外因为我本来应该做一个逆时针插入功能,但实际上顺时针方向遇到麻烦,所以我很卡住了。

提前非常感谢你。

编辑:我很抱歉,我没有提供我正在做的事情的实际例子。 基本上,我正在尝试制作一个链表 - 简单而基本的考试。

我的链表基本上是由节点组成的堆栈。节点是我的列表的组成部分,它由数据部分和到下一个节点部分的链接组成:

template <class item>
class node{
public:
    //CONSTRUCTOR
    nodo(item & d=item(), nodo*l=NULL){
        data=d;
        link=l;
    }

    //GET E SET METHODS
    void set_data(item& d){data=d;}
    void set_link(node*l){link=l;}

    item& get_data(){return data;}
    const item& get_data()const{return data;}
    node*& get_link(){return link;}
    const node* get_link()const{return link;}

private:
    item data;
    node* link;
};

现在,正如我所说的列表是由节点组成的,在私有部分中,我声明了一个指向列表头部的指针。

 node<item>* head;

这是此代码的示例 - 然后问题就像我之前写的那样发生。

1 个答案:

答案 0 :(得分:0)

node的构造函数中,您应该通过const-reference传递item(并且在node类中有一些拼写错误,可能是复制+粘贴错误。

class node{
public:
    //CONSTRUCTOR
    node(item const & d=item(), node*l=0)
        : data(d), link(l) // prefer initializer list here
    { }
    //...