C++错误LNK 1120关于TEMPLATES

C++ Error LNK 1120 about TEMPLATES

本文关键字:关于 TEMPLATES 1120 LNK 错误 C++      更新时间:2023-10-16

可能重复:
为什么我得到“未解析的外部符号”使用模板时出错
使用模板的链接错误

我在两个文件"MyHeap.h"answers"MyHeapp.cpp"中有一个模板类"MyHeap"。可以在vs10中编译。但当我尝试在main中使用这个类时,发生了这个错误。我环顾四周,仍然无法自己解决这个问题。请帮帮我…

错误信息>>

MyHeap<int> minHeap(MyHeap<int>::MaxHeap);

错误1错误LNK2001:未解析的外部符号"public:__thiscall MyHeap::MyHeap(enum MyHeap:::HeapType)"(??0$MyHeap@H@@QAE@W4HeapType@0@@Z)D:\文档\Visual Studio 2010\Projects\C++\ConsolePP_Trivia\ConsoleCPP_rivia\program.obj错误2错误LNK1120:1未解析的外部数D:\文档\Visual Studio 2010\Projects\C++\ConsolePP_Trivia\Debug\ConsoleCPP _Trivia.exe

MyHeap.h:
-----------------------------------------------------------
#pragma once
#include <vector>
using namespace std;
template <class T>
class MyHeap
{
public:
    static enum HeapType {CustomizedHeap, MaxHeap, MinHeap};
private:
    typedef bool (*COMP_FUNC)(const T&, const T&);
    COMP_FUNC _comp;
    HeapType _heapType;
    vector<T> _data;
public:
    MyHeap(HeapType heap_type = MaxHeap);
    MyHeap(COMP_FUNC compare_function);
    void add(const T& item);    
    T remove();
    bool isEmpty() const;
    void clear();
private:
    bool __compare(const T&, const T&);
};

必须在头文件中定义模板。不能在源文件和头文件中分离模板类/函数的实现。

原因是,模板是C++的编译时"特性",它们的实现必须在编译时可见。