一千萬個為什麽

搜索

從Java學習C ++,嘗試創建一個鏈表

我剛剛開始學習 C ++ (來自 Java )並且在做任何事情時遇到了一些嚴重的問題:P目前,我正在嘗試創建一個鏈表,但必須這樣做一些愚蠢的原因我一直得到“空值不被忽略,因為它應該是”編譯錯誤(我把它標記在它下面扔它的地方)。如果有人能幫我解決我做錯了什麽,我將非常感激:)

另外,我不習慣選擇通過引用,地址或值傳遞,以及一般的內存管理(目前我擁有所有節點和堆上聲明的數據)。 如果有人對我有任何一般性建議,我也不會抱怨:P

Key code from LinkedListNode.cpp

LinkedListNode::LinkedListNode()
{
    //set next and prev to null
    pData=0; //data needs to be a pointer so we can set it to null for
             //for the tail and head.
    pNext=0;
    pPrev=0;
}

/*
 * Sets the 'next' pointer to the memory address of the inputed reference.
 */
void LinkedListNode::SetNext(LinkedListNode& _next)
{
    pNext=&_next;
}

/*
 * Sets the 'prev' pointer to the memory address of the inputed reference.
 */
void LinkedListNode::SetPrev(LinkedListNode& _prev)
{
    pPrev=&_prev;
}
//rest of class

LinkedList.cpp的密鑰代碼

#include "LinkedList.h"

LinkedList::LinkedList()
{
   //Set head and tail of linked list.
    pHead = new LinkedListNode();
    pTail = new LinkedListNode();

     /*
      * THIS IS WHERE THE ERRORS ARE.
      */
    *pHead->SetNext(*pTail);
    *pTail->SetPrev(*pHead);
}
//rest of class

最佳答案

中的前導 *

*pHead->SetNext(*pTail);
*pTail->SetPrev(*pHead);

不需要。

pHead is a pointer to a node and you call the SetNext method on it as pHead->SetNext(..) passing an object by reference.

-> has higher precedence than *

因此,您有效地嘗試取消引用函數 SetNext 的返回值,該函數不返回任何內容,從而導致此錯誤。

轉載註明原文: 從Java學習C ++,嘗試創建一個鏈表