2017-05-08 48 views
0

我一直在困难的时间包围指针和链表。我可以看到这些类型的问题在这里经常被问到,所以我很抱歉加入到这个论坛的泥潭​​中。然而,我一直试图将这项任务包装两天,而我似乎无法得到它。链接列表值的C++复制构造函数,而不是地址

我应该指出这是一项家庭作业!

我有一个项目,其中我必须复制链表,销毁旧列表并保留值。我几乎必须通过引用将整个列表传递给拷贝构造函数,而不仅仅是一个节点。

我已经看到了一些真正伟大的反应已经在这里做了一些挖后,和最近我看到一个解决方案,我需要实现的是这一个:

Coding a function to copy a linked-list in C++

当我尝试实现类似的代码,以我的,它给我这个错误在编译:错误:一元的无效类型参数“*”(有“诠释”)链表

下面的代码:

IntList::IntList(const IntList &a){ 
    if(a.head != NULL) 
    { 
      ListNode *thisNode = a.head; 
      ListNode *nextN = NULL; 

      while(thisNode != NULL) 
      { 
        ListNode *newNode = new ListNode; 
        newNode->value = (*thisNode->value); //error occurs here 

        if(nextN == NULL) 
        { 
          nextN = newNode; 
        } 
        else 
        { 
          nextN->next = newNode; 
          nextN = nextN->next; 
        } 
        thisNode = thisNode->next; 
        size++; 
      } 
    } 
    else 
    { 
     cout << "The list empty." << endl; 
     return; 
    } 
} 

如果我删除第10行的封装,构造函数不会发出错误。但是,一旦我调用析构函数,旧列表仍然引用刚被清空的内存。

我真的很感谢在这个任务上的任何帮助。我认为我并没有正确引用指针,但似乎无法破解代码并使其正常工作...

+0

欢迎来到StackOverflow。 请参考[游览], 学习问好问题stackoverflow.com/help/how-to-ask, 做个[mcve]。 如果您正在寻找调试代码的帮助,请参阅https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Yunnosch

+0

您应该使用newNode-> value = thisNode-> value – Kapil

回答

0

而不是 newNode-> value =(* thisNode-> value);你需要 newNode-> value = thisNode-> value;

+0

I开始这样做,但是当我销毁之前的列表时,新列表的数据不会保留。我认为newNode-> value只是指向与thisNode-> value相同的地址。我不知道如何实际创建一个值的副本,而不是指向同一块内存。 – RLee

相关问题