InsertNode函数关闭程序

用户名

我在编码链接列表模板时遇到问题。它可以编译,但是出现以下错误:

1> main.obj:错误LNK2019:未解析的外部符号“公共:__ thiscall LinkedList ::〜LinkedList(void)”(?? 1?$ LinkedList @ H @@ QAE @ XZ)在函数_main中引用

1> main.obj:错误LNK2019:未解析的外部符号“ public:void __thiscall LinkedList :: deleteNode(int)”(?deleteNode @?$ LinkedList @ H @@ QAEXH @ Z)在函数_main中引用

1> main.obj:错误LNK2019:未解析的外部符号“公共:无效__thiscall LinkedList :: displayList(void)”(?displayList @?$ LinkedList @ H @@ QAEXXZ)在函数_main中引用

1> main.obj:错误LNK2019:未解析的外部符号“ public:void __thiscall LinkedList :: insertNode(int)”(?insertNode @?$ LinkedList @ H @@ QAEXH @ Z)

1> c:\ users \ pr0hz \ documents \ Visual Studio 2010 \ Projects \ ListTemplate \ Debug \ ListTemplate.exe:致命错误LNK1120:4个未解决的外部组件

在过去的几个小时里,我一直盯着屏幕尝试解决此问题,对您的帮助将不胜感激。这是我的代码:

main.cpp

#include <iostream>
#include <conio.h>
#include "LinkedList.h"

using namespace std;


int main()
{   
LinkedList<int> list;

list.insertNode(5);
list.insertNode(7);
list.insertNode(1);
list.insertNode(19);
list.insertNode(16);
list.insertNode(22);

cout << "\nDisplay the list: \n";
list.displayList();
cout << endl;

list.deleteNode(16);

cout << "\nDisplay node with 16 deleted: \n";
list.displayList();
cout << endl;

LinkedList<int> list2 = list;

cout << "\nDisplay List 2: \n";
list2.displayList();
cout << endl;
getch();

return 0;
}

LinkedList.h

#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include <iostream>

using namespace std;

template <class T>
class LinkedList
{
private:
struct ListTemplate
{
    T value;
    ListTemplate *next;
};

ListTemplate *head;


public:
//Constructor
LinkedList()
{ head = NULL; }

//Destructor
~LinkedList();

//Copy Constructor
LinkedList(ListTemplate &obj)
{
    ListTemplate *nodePtr = &obj;   //Move through the list
    ListTemplate *newNode = new ListTemplate;

    if(!head)
        return;
    else
    {
        newNode = head;

        while(nodePtr->next)
        {
            nodePtr = nodePtr->next;
            newNode->next = nodePtr;
        }

    }
}

void appendNode(T);
void insertNode(T);
void deleteNode(T);
void displayList();
};
#endif

LinkedList.cpp

#include "LinkedList.h"
#include <iostream>

using namespace std;

template <class T>
void LinkedList<T>::appendNode(T newValue)
{
ListTemplate *newNode;  //Point to the new node
ListTemplate *nodePtr;  //Move through the list

//Allocate new node and store num there
newNode = new ListTemplate;
newNode->value = num;
newNode->next - NULL;

if(!head)
    head = newNode;
else
{
    //Initialize the nodePtr as head to move through the list
    nodePtr = head;

    //While there is still a node, we move through it until there is no more
    while (nodePtr->next)
        nodePtr = nodePtr->next;

    //Append the node
    nodePtr->next = newNode;
}
}

template <class T>
void LinkedList<T>::insertNode(T newValue)
{
ListTemplate *newNode;              //New Node
ListTemplate *nodePtr;              //Move through the list
ListTemplate *previousNode = NULL;  //The previous node

//Allocate new node and store num
newNode = new ListTemplate;
newNode->value = num;

//If no node, new node is head
if (!head)
{
    head = newNode;
    newNode->next = NULL;
}

else //Insert node where it needs to be
{
    nodePtr = head;         //Beginning position

    previousNode = NULL;

    //Skip nodes that are less than newNode
    while(nodePtr != NULL && nodePtr->value < num)
    {
        previousNode = nodePtr;
        nodePtr = nodePtr->next;
    }

    //If newNode is the 1st in the list, insert it in slot 1
    if (previousNode == NULL)
    {
        head = newNode;
        newNode->next = nodePtr;
    }
    else //Insert after previous node
    {
        previousNode->next = newNode;
        newNode->next = nodePtr;
    }
}
}

template <class T>
void LinkedList<T>::deleteNode(T searchNum)
{
ListTemplate *nodePtr;
ListTemplate *previousNode;

//If the list is empty, do nothing
if(!head)
    return;

//See if the first node is the one
if(head->value == num)
{
    nodePtr = head->next;
    delete head;
    head = nodePtr;
}

else //Find the node to delete
{
    nodePtr = head;

    //Skip the nodes not equal to num
    while (nodePtr != NULL && nodePtr->value != num)
    {
        previousNode = nodePtr;
        nodePtr = nodePtr->next;
    }

    //Delete node and link previous node to the one of the one being deleted
    if (nodePtr)
    {
        previousNode->next = nodePtr->next;
        delete nodePtr;
    }
}
}

template <class T>
LinkedList<T>::~LinkedList()
{
ListTemplate *nodePtr;
ListTemplate *nextNode;

nodePtr = head;

while (nodePtr != NULL)
{
    nextNode = nodePtr->next;

    delete nodePtr;

    nodePtr = nextNode;
}
}

template <class T>
void LinkedList<T>::displayList()
{
ListTemplate *nodePtr;

nodePtr = head;

while(nodePtr)
{
    cout << nodePtr->value << " ";
    nodePtr = nodePtr->next;
}
}

再次感谢您的帮助!

里尔

您不应该在源文件中实现模板功能。
参见此处-为什么只能在头文件中实现模板?

尝试将所有模板函数移到头文件(LinkedList.h)中,然后重新编译

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

重复或关闭程序?

来自分类Dev

无法关闭程序

来自分类Dev

XCode正常关闭程序

来自分类Dev

使用python关闭程序?

来自分类Dev

用电池关闭程序

来自分类Dev

退出框架时如何关闭程序

来自分类Dev

是否可以通过python关闭程序?

来自分类Dev

每天在计划的时间自动关闭程序

来自分类Dev

关闭程序后出现异常

来自分类Dev

使用 gcc 编译时关闭程序

来自分类Dev

Qt:关闭模式对话框关闭程序

来自分类Dev

防止在控制台窗口关闭时关闭程序

来自分类Dev

我关闭程序时端口如何关闭

来自分类Dev

关闭程序后如何自动重新启动程序

来自分类Dev

关闭程序后如何删除程序exe文件

来自分类Dev

在Excel中使用Find和打开/关闭程序

来自分类Dev

Python的关闭程序记录在哪里?

来自分类Dev

PyQt4 WindowFlags不关闭程序

来自分类Dev

关闭程序后保留剪贴板信息

来自分类Dev

编写动作侦听器以关闭程序Java

来自分类Dev

如何通过按下按钮关闭程序?

来自分类Dev

在关闭程序之前,确认所有任务已完成

来自分类Dev

一律自动选择“关闭程序”

来自分类Dev

计算完成后如何用dos关闭程序?

来自分类Dev

PyQt4 WindowFlags不关闭程序

来自分类Dev

在CMD中强制退出/关闭程序/会话

来自分类Dev

从终端关闭程序窗口而无需终止进程

来自分类Dev

如何完全使用“后退”按钮关闭程序

来自分类Dev

如何立即关闭程序的所有实例?