我设法使用以下名为node的类创建了单个链接列表:
class node
{
protected:
int info; //value
int lenght;
node *next;
node *head;
};
(在公共场合,我有正在使用的功能)。还有另一个类double_node:
class double_node : public node
{
protected : node *prev;
};
我的问题是在double_node类中使用add函数,我遇到了两个问题(修改了10次,但我会在遇到所有错误的情况下发布一个,因为我不确定其他版本是否已修复)其中任何一个):
void add (int x){
double_node *p = new double_node(x); // constructor makes next = NULL & info = x
if (head == NULL)
{
p->prev = NULL;
head = p;
}
else
{
double_node* q = head; //#1st issue, no idea how to initialize a pointer with head
while (q->next!= NULL)
{
q = q->next; //#2nd issue
}
q->next= p;
p->prev= q;
}
}
两个错误均为:从'node *'到'double_node *'的无效转换[-fpermissive]。 有解决这个问题的想法吗?还是另一种创建双向链接列表的方法? 预先感谢!
注意:将其发布在代码审查中,但有人告诉我它在这里更合适。
答案 0 :(得分:0)
在node*
函数中声明double_node*
而不是add
就足够了。
您始终可以将一个指向子类的指针分配给其祖先,但是相反的方法无效。
满足以下条件即可:
void add (int x){
node *p = new double_node(x);
if (head == NULL)
{
head = p;
}
else
{
node* q = head;
while (q->next!= NULL)
{
q = q->next; //#2nd issue
}
q->next= p;
static_cast<double_node*>(p)->prev= q;
}
}