2012-07-07 108 views
-5

可能重复:
Why do I get “unresolved external symbol” errors when using templates?
Link error using templatesC++错误LNK 1120有关模板

我哈瓦在两个文件 'MyHeap.h' 模板类 'MyHeap' 和“MyHeap。 CPP”。编译成vs10,好的。但是当我尝试在main中使用这个类时,发生了这个错误。我环顾四周,依然无法自己解决这个问题。请帮我...

错误信息>>

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

错误1错误LNK2001:无法解析的外部符号 “公用:__thiscall MyHeap :: MyHeap(枚举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.exe \ 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

-1:可能是最相关的与C++有关的SO问题。 – Troubadour 2012-07-07 10:24:06

+0

@Troubadour什么是SO? – tmj 2012-07-07 10:48:24

回答

3

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

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

+0

你是说我应该把所有的代码放在.h文件中? – tmj 2012-07-07 10:25:16

+0

@Ggicci是的,这就是我的意思:) – 2012-07-07 10:25:33

+0

Thanx,它的工作原理:-) – tmj 2012-07-07 10:44:26