使用类继承将单个喜欢的列表转换为双向链接列表

时间:2019-04-12 09:38:09

标签: c++ oop

我设法使用以下名为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]。 有解决这个问题的想法吗?还是另一种创建双向链接列表的方法? 预先感谢!

注意:将其发布在代码审查中,但有人告诉我它在这里更合适。

1 个答案:

答案 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;
    }
}