2010-08-23 24 views
0

我對LinkedList做了一些測試,它有兩個指針:一個指向列表中的下一個項目,另一個指向列表中的隨機節點。在測試LinkedList時在VS2010中編譯錯誤

下面是代碼:

struct Node 
{ 
    Node* pNext;  // a pointer to the next node in the list 
    Node* pReference; // a pointer to a random node within the list 
    int number;  // an integer value 
}; 

/** 
* This version works for small/medium lists, using recursion. 
*/ 

Node* duplicateList(Node* n) 
{ 
    if (n == NULL) return NULL; 

    return new Node() 
    { 
    number = n->number, 
    pNext = duplicateList(n->pNext), 
    pReference = duplicateList(n->pReference) 
    }; 
} 

,我發現了以下錯誤(VS2010):

d:\dornad\my documents\visual studio 2010\projects\test\test.cpp(21): error C2143: syntax error : missing ';' before '{'

1>d:\dornad\my documents\visual studio 2010\projects\test\test.cpp(22): error C2065: 'number' : undeclared identifier

1>d:\dornad\my documents\visual studio 2010\projects\test\test.cpp(23): error C2065: 'pNext' : undeclared identifier

1>d:\dornad\my documents\visual studio 2010\projects\test\test.cpp(24): error C2065: 'pReference' : undeclared identifier

1>d:\dornad\my documents\visual studio 2010\projects\test\test.cpp(25): error C2143: syntax error : missing ';' before '}'

謝謝。

回答

6

此位是無效的C++:

return new Node() 
{ 
    number = n->number, 
    pNext = duplicateList(n->pNext), 
    pReference = duplicateList(n->pReference) 
}; 

它改成這樣:

Node* pNode = new Node(); 
pNode->number = n->number; 
pNode->pNext = duplicateList(n->pNext); 
pNode->pReference = duplicateList(n->pReference); 

return pNode; 
+1

會很好的語法tho :) – 2010-08-23 23:05:34

+1

確實會。一段時間後,人們會被C#語法糖弄壞。 – 2010-08-23 23:15:06

1

添加一個構造函數節點:

struct Node 
{ 
    Node(Node* next, Node* ref, int number) : pNext(next), pReference(ref), number(number) { } 

    // ... 
}; 

然後

return new Node(a, b, c);