双向链表 - 是啥导致我的代码引发编译器错误,我该如何解决?

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)

【讨论】:

感谢您的建议。我一定会申请的。

以上是关于双向链表 - 是啥导致我的代码引发编译器错误,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

需要一些关于 C++ 中的类的建议,双向链表

当为“var”和“let”分配一个引发错误的函数的返回值时,是啥导致了它们之间的不同行为

是啥导致我的网络服务出现此 403 错误?

在 init() 方法上引发错误的原因是啥?

我的双向链表项目出现 c2955 错误

希望我的代码引发特定类型或错误,但打印原始错误