Дважды связанный список - Что вызывает мой код, чтобы выдать ошибку компилятора и как я могу это исправить? - PullRequest
0 голосов
/ 26 октября 2011

Я работал над кодом двусвязного списка и не могу найти причину ошибки при каждой попытке компиляции.Выдается ошибка:

main.obj: ошибка LNK2019: неразрешенный внешний символ "public: __thiscall DoublyList :: DoublyList (void)" (?? 0? $ DoublyList @ H @@ QAE @ XZ) ссылка в функции> _main 1> Doubly List.exe: фатальная ошибка LNK1120: 1 неразрешенные внешние данные

DoublyList.h -> http://pastebin.com/5wbeKksv
DoublyListNode.h и main.cpp-> http://pastebin.com/vVdGpgaW

Ответы [ 4 ]

2 голосов
/ 26 октября 2011

Вы объявляете, но не определяете DoublyList конструктор по умолчанию. То же самое касается его деструктора.

0 голосов
/ 26 октября 2011

Не относится к вашему вопросу, и я знаю, что это не раздел обзора кода, но вот некоторые из моих мыслей.

В вашей функции вставки

DoublyListNode < T > *newPtr = new DoublyListNode< T >(tempData);
newPtr->nextPtr = newPtr->prePtr = NULL;
if(newPtr == NULL)
{
     cout << "Insert cannot allocate memory\n";
} //end if

должно быть

DoublyListNode < T > *newPtr = new DoublyListNode< T >(tempData);
if(newPtr == NULL)
{
     cout << "Insert cannot allocate memory\n";
}else{
     newPtr->nextPtr = newPtr->prePtr = NULL;
     // rest of code

Кроме того, в вашей функции поиска

DoublyListNode< T > *currentPtr = head;
for(int i = 1; i < index; i++)
{
     currentPtr = currentPtr->nextPtr;
} // end for

должно быть

DoublyListNode< T > *currentPtr = head;
for(int i = 1; currentPtr && (i < index); i++)
{
     currentPtr = currentPtr->nextPtr;
} // end for

Кроме того, поскольку вы используете C ++, рассмотрите возможность сделать ваши индексы на основе 0 (глядя на твой код они на базе атм 1)

0 голосов
/ 26 октября 2011

Вы определили конструктор копирования, но забыли определить конструктор по умолчанию:

template< class T >
DoublyList< T > :: DoublyList() : head(NULL), size( 0 )
{
    // empty body
} // end DoublyList
0 голосов
/ 26 октября 2011

Вы объявили конструктор для DoublyList, но не определили его.Добавьте {} после вашего DoublyList () и посмотрите, работает ли он, снимите;тоже.

...