关于TEMPLATES的C ++错误LNK 1120

时间:2012-07-07 10:18:22

标签: c++ templates

  

可能重复:
  Why do I get “unresolved external symbol” errors when using templates?
  Link error using templates

我在两个文件'MyHeap.h'和'MyHeap.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 ++ \ ConsoleCPP_Trivia \ ConsoleCPP_Trivia \ program.obj 错误2错误LNK1120:1个未解析的外部D:\文档\ 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&);
};

1 个答案:

答案 0 :(得分:3)

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

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