2010-08-23 4 views
0

Je fais des tests sur une LinkedList, qui a deux pointeurs: un point à l'élément suivant dans la liste et l'autre point à un nœud aléatoire dans la liste.Erreur de compilation dans VS2010 lors du test des LinkedLists

Voici le code:

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) 
    }; 
} 

Je reçois les erreurs suivantes (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 '}'

Merci.

Répondre

6

Ce bit n'est pas valide C++:

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

Modifier à ceci:

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

return pNode; 
+1

Serait belle syntaxe tho :) –

+1

En effet, il serait. Après un certain temps, on se gâte avec du sucre syntaxique C#. –

1

Ajouter un constructeur à noeud:

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

    // ... 
}; 

puis

return new Node(a, b, c); 
Questions connexes