双向链表 - 是啥导致我的代码引发编译器错误,我该如何解决?
Posted
技术标签:
【中文标题】双向链表 - 是啥导致我的代码引发编译器错误,我该如何解决?【英文标题】:Doubly Linked List - What is causing my code to throw a compiler error and how can I fix it?双向链表 - 是什么导致我的代码引发编译器错误,我该如何解决? 【发布时间】:2011-10-26 17:45:23 【问题描述】:我一直在编写双向链表代码,每次尝试编译时都无法找到导致错误的原因。抛出的错误是
main.obj : error LNK2019: unresolved external symbol "public: __thiscall 函数 >_main 中引用的 DoublyList::DoublyList(void)" (??0?$DoublyList@H@@QAE@XZ) 1>双重 List.exe : 致命错误 LNK1120: 1 unresolved externals
DoublyList.h -> http://pastebin.com/5wbeKksv DoubleListNode.h 和 main.cpp -> http://pastebin.com/vVdGpgaW
【问题讨论】:
请注意,这不是编译器错误,而是链接器错误。 【参考方案1】:您声明但未定义 DoublyList
默认构造函数。它的析构函数也是如此。
【讨论】:
哇。有效。谢谢。这么尴尬的错误。如果该错误对用户更友好,例如“您忘记声明这一点”,那就太棒了。 @Falmung:应该是“你忘了定义这个”,你要声明它。【参考方案2】:您已经为 DoublyList 声明了一个构造函数,但没有定义它。在您的 DoublyList() 之后添加一个 并查看它是否有效,取下 ;也是。
【讨论】:
【参考方案3】:您已经定义了复制构造函数,但忘记定义默认构造函数:
template< class T >
DoublyList< T > :: DoublyList() : head(NULL), size( 0 )
// empty body
// end DoublyList
【讨论】:
【参考方案4】:与您的问题无关,我知道这不是代码审查部分,但这是我的一些想法。
在你的插入函数中
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
另外,在你的 find 函数中
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(查看您的代码,它们是基于 atm 1)
【讨论】:
感谢您的建议。我一定会申请的。以上是关于双向链表 - 是啥导致我的代码引发编译器错误,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章