我正在实现一个简单的链接列表,但我不断收到LNK2019错误,我将我的代码简化为最小化以跟踪问题,但我一直得到它。我正在使用Visual Studio 2010.我的头文件是:
#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;
};
实施文件是:
#include "StdAfx.h"
#include "LinkedList.h"
template <class T>
LinkedList<T>::LinkedList(void)
{
head = NULL;
}
template <class T>
LinkedList<T>::~LinkedList(void)
{
}
主要功能是:
#include "stdafx.h"
#include "stdlib.h"
#include "LinkedList.h"
int _tmain(int argc, _TCHAR* argv[])
{
LinkedList<int> mList;
system("PAUSE");
return 0;
}
我收到此错误:
错误1错误LNK2019:símboloexterno“public:__ thistall LinkedList ::〜LinkedList(void)”(?? 1?$ LinkedList @ H @@ QAE @ XZ)函数_wmain
我在构造函数中遇到了同样的错误。有趣的是它指向_wmain,我的主要功能叫做_tmain。我已经尝试将子系统链接器从/ SUBSYSTEM:WINODWS更改为/ SUBSYSTEM:CONSOLE,但它已经设置为/ SUBSYSTEM:CONSOLE。显然我的实现远不止这些,但是我把所有这些都用来跟踪这个问题。帮助wpuld被贬低,这让我疯了。我是C ++的新手。
答案 0 :(得分:2)
将函数实现移动到头文件。
为了生成专业化代码,编译器必须具有每个翻译单元可用的函数定义。
#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
答案 1 :(得分:0)
编译器不会编译模板类成员定义,因为它们不包含在任何编译单元中。
但是,确实看到使用了某些成员,因此会为这些成员生成“未定义”符号。
然后是链接器,尝试将未定义的符号与其中一个编译的目标文件中定义的某些符号相匹配。
但是,LinkedList::~LinkedLis()
析构函数尚未编译,因此它不在任何目标文件中,这就是链接器所抱怨的内容。
您可以通过
解决此问题