双链表 - 导致我的代码抛出编译错误的原因是什么?如何解决?

时间:2011-10-26 17:45:23

标签: c++ linker-errors doubly-linked-list

我一直在处理Doubly Linked List代码,而且每次尝试编译时我都无法找到导致错误的原因。抛出的错误是

  

main.obj:错误LNK2019:未解析的外部符号“public:__ thishisall   在函数> _main中引用的DoublyList :: DoublyList(void)“(?? 0?$ DoublyList @ H @@ QAE @ XZ)   1> Doubly List.exe:致命错误LNK1120:1未解析的外部

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

4 个答案:

答案 0 :(得分:2)

您声明但未定义DoublyList默认构造函数。它的析构函数也是如此。

答案 1 :(得分:0)

您已为DoublyList声明了构造函数但未对其进行定义。在你的DoublyList()之后添加一个{}并查看它是否有效取消了;太

答案 2 :(得分:0)

您已经定义了复制构造函数,但忘记定义默认构造函数:

template< class T >
DoublyList< T > :: DoublyList() : head(NULL), size( 0 )
{
    // empty body
} // end DoublyList

答案 3 :(得分:0)

与您的问题无关,我知道这不是代码审查部分,但这是我的一些想法。

在插入功能

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的)