我很抱歉,我知道以前曾经问过,但即使我尝试阅读所有其他类似问题的答案,我也无法理解我的错误。 我正在使用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;
这是此代码的示例 - 然后问题就像我之前写的那样发生。
答案 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
{ }
//...