-5

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

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

错误信息 >>

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

错误1 error LNK2001: unresolved external symbol "public: __thiscall MyHeap::MyHeap(enum MyHeap::HeapType)" (??0?$MyHeap@H@@QAE@W4HeapType@0@@Z) D:\Document\Visual Studio 2010\Projects\C++\ConsoleCPP_Trivia\ConsoleCPP_Trivia\program.obj 错误2 error LNK1120: 1 unresolved externals D:\Document\Visual Studio 2010\Projects\C++\ConsoleCPP_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&);
};
4

1 回答 1

3

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

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

于 2012-07-07T10:22:33.263 回答