Ошибка компиляции в VS2010 при тестировании LinkedLists - PullRequest
0 голосов
/ 24 августа 2010

Я делаю несколько тестов для LinkedList, который имеет два указателя: один указывает на следующий элемент в списке, а другой указывает на случайный узел в списке.

Вот код:

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 '}'

Спасибо.

Ответы [ 2 ]

6 голосов
/ 24 августа 2010

Этот бит недействителен 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 голос
/ 24 августа 2010

Добавить конструктор в Node:

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

   // ...
};

, затем

return new Node(a, b, c);
...