c++ - LNK2019 与模板

标签 c++ templates

为什么我在同一文件中定义和实现了模板,但仍然出现链接错误 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/

相关文章:

c++ - 调用模板化成员的成员函数

c++ - 类不能被 boost::python 包装

c++ - 结构中固定大小的数组是否需要在 C++ 析构函数中显式销毁?

c++ - 如何修复这些编译器错误?

c++ - 原始类型初始化的构造函数语法和赋值语法之间的差异

c++ - 如何在 c++ 中的 vector<Object*> 中搜索特定变量?

c++ - 返回 NaN 还是抛出异常?

c++ - 检查类是否是模板特化?

c++ - 将 nullptr 参数委托(delegate)给模板代码中的指针重载

c++ - C++ 编译器会为每个模板类型生成代码吗?