Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误LNK2019简单链表实现_C++_Lnk2019 - Fatal编程技术网

C++ 错误LNK2019简单链表实现

C++ 错误LNK2019简单链表实现,c++,lnk2019,C++,Lnk2019,我正在实现一个简单的链表,但是我一直得到LNK2019错误,我将代码简化到最小以跟踪问题,但是我一直得到它。我正在使用VisualStudio2010。我的头文件是: #ifndef __TSLinkedList__H__ #define __TSLinkedList__H__ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "LinkedNode.h" template <class

我正在实现一个简单的链表,但是我一直得到LNK2019错误,我将代码简化到最小以跟踪问题,但是我一直得到它。我正在使用VisualStudio2010。我的头文件是:

#ifndef __TSLinkedList__H__
#define __TSLinkedList__H__

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "LinkedNode.h"

template <class T>
class LinkedList
{
public:
LinkedList(void);
~LinkedList(void);
protected:
LinkedNode<T> * head;
};
\ifndef\uu TSLinkedList\uh__
#定义链接列表__
#如果MSC版本>1000
#布拉格语一次
#endif/\u MSC\u VER>1000
#包括“LinkedNode.h”
模板
类链接列表
{
公众:
链接列表(无效);
~LinkedList(无效);
受保护的:
链接节点*头;
};
实施文件为:

#include "StdAfx.h"
#include "LinkedList.h"

template <class T>
LinkedList<T>::LinkedList(void)
{
head = NULL;
}
template <class T>
LinkedList<T>::~LinkedList(void)
{
}
#包括“StdAfx.h”
#包括“LinkedList.h”
模板
LinkedList::LinkedList(无效)
{
head=NULL;
}
模板
LinkedList::~LinkedList(无效)
{
}
主要功能是:

#include "stdafx.h"
#include "stdlib.h"
#include "LinkedList.h"

int _tmain(int argc, _TCHAR* argv[])
{
LinkedList<int> mList;
system("PAUSE");
return 0;
} 
#包括“stdafx.h”
#包括“stdlib.h”
#包括“LinkedList.h”
int _tmain(int argc,_TCHAR*argv[]
{
LinkedList-mList;
系统(“暂停”);
返回0;
} 
我得到了这个错误:

错误1错误LNK2019:símbolo externo“public:u thiscall LinkedList::~LinkedList(void)”(?1$LinkedList@H@@QAE@XZ)在函数中


我得到了与构造函数相同的错误。有趣的是它指向了_wmain,我的主要函数叫做_tmain。我已经尝试将子系统链接器从/Subsystem:WINODWS更改为/Subsystem:CONSOLE,但它已经设置为/Subsystem:CONSOLE。很明显,我的实现做的远不止这些,但为了跟踪这个问题,我删除了所有的实现。我会感激你的帮助,这让我快发疯了。我是C++的新手。< /p> 将函数实现移到头文件。

为了生成专门化的代码,编译器必须具有每个翻译单元可用的函数定义

#ifndef __TSLinkedList__H__
#define __TSLinkedList__H__

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "LinkedNode.h"
template <class T>
class LinkedList
{
public:
    LinkedList(void);
    ~LinkedList(void);
    protected:
    LinkedNode<T> * head;
};

template <class T>
LinkedList<T>::LinkedList(void)
{
head = NULL;
}
template <class T>
LinkedList<T>::~LinkedList(void)
{
}

#endif
\ifndef\uu TSLinkedList\uh__
#定义链接列表__
#如果MSC版本>1000
#布拉格语一次
#endif/\u MSC\u VER>1000
#包括“LinkedNode.h”
模板
类链接列表
{
公众:
链接列表(无效);
~LinkedList(无效);
受保护的:
链接节点*头;
};
模板
LinkedList::LinkedList(无效)
{
head=NULL;
}
模板
LinkedList::~LinkedList(无效)
{
}
#恩迪夫

编译器不会编译模板类成员定义,因为它们不包含在任何编译单元中

#ifndef __TSLinkedList__H__
#define __TSLinkedList__H__

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "LinkedNode.h"
template <class T>
class LinkedList
{
public:
    LinkedList(void);
    ~LinkedList(void);
    protected:
    LinkedNode<T> * head;
};

template <class T>
LinkedList<T>::LinkedList(void)
{
head = NULL;
}
template <class T>
LinkedList<T>::~LinkedList(void)
{
}

#endif
但是,它确实看到使用了一些成员,因此它将为这些成员生成“未定义”符号

然后是链接器,试图将未定义的符号与其中一个编译的对象文件中定义的某些符号进行匹配

但是,
LinkedList::~LinkedLis()
析构函数尚未编译,因此它不在任何对象文件中,而这正是链接器所抱怨的

你可以通过

  • 将定义文件包括在主源文件中
  • 或者将定义粘贴到模板头文件中
  • 或者包括模板头文件底部的模板实现文件(我的最爱)

好的,还有更多关于这方面的问题。。只需在头文件中移动实现。模板不能在头文件/源文件中分开。也可能是重复的,您不应该将其用作包含保护。@MikeSeymour不知道。链接器需要它们。编译器只需要声明。@xtofl实际上,编译器需要它们来生成链接器的代码;)谢谢,这很有帮助,所以这意味着我无法在.h和.cpp文件中分离内容?