为什么我在同一文件中定义和实现了模板,但仍然出现链接错误 LNK2019? 这是我的代码:
#ifndef _LINKEDLIST_H_
#define _LINKEDLIST_H_
#include <iostream>
using namespace std;
template <class T>
class LinkedList
{
private:
struct node
{
T data;
node* pNext;
};
node* pHead;
node* pTail;
int count;
public:
LinkedList();
~LinkedList();
bool isEmpty();
int getLength();
bool insert(int position, T value);
bool remove(int position);
bool addHead(T value);
bool addTail(T value);
bool removeHead();
bool removeTail();
void clear();
T getEntry(int position);
void setEntry(int position, T value);
};
template <class T>
LinkedList<T>::LinkedList();
template <class T>
LinkedList<T>::~LinkedList();
template <class T>
bool LinkedList<T>::isEmpty();
template <class T>
int LinkedList<T>::getLength();
template <class T>
bool LinkedList<T>::insert(int position, T value);
template <class T>
bool LinkedList<T>::remove(int position);
template <class T>
bool LinkedList<T>::addHead(T value);
template <class T>
bool LinkedList<T>::addTail(T value);
template <class T>
bool LinkedList<T>::removeHead();
template <class T>
bool LinkedList<T>::removeTail();
template <class T>
void LinkedList<T>::clear();
template <class T>
T LinkedList<T>::getEntry(int position);
template <class T>
void LinkedList<T>::setEntry(int position, T value);
#endif
以及如何将其拆分为两个文件?我搜索并找到了一些方法,例如同时包含 .h
和 .cpp
在主文件中或包含 .cpp
在.h
文件,但没有用。
最佳答案
上述问题的答案,如一些评论中所写,是您没有定义而只是声明模板:
template <class T>
class LinkedList
{
...
public:
LinkedList();
~LinkedList();
...
};
template <class T>
LinkedList<T>::LinkedList(); // Not a definition
关于您的问题“我可以将它分成 cpp 和 h 文件吗?” 还有另一个不同的问题深入解决了这个问题:Why can templates only be implemented in the header file?
关于c++ - LNK2019 与模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26426683/