-5

重複の可能性:
テンプレートを使用すると「未解決の外部シンボル」エラーが発生するのはなぜですか?
テンプレートを使用したリンク エラー

「MyHeap.h」と「MyHeap.cpp」の 2 つのファイルに「MyHeap」というテンプレート クラスがあります。vs10 でコンパイルします。しかし、このクラスをメインで使用しようとすると、このエラーが発生しました。私は周りを見回しましたが、まだこれを自分で解決することはできません。私を助けてください...

エラー情報 >>

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&);
};
4

1 に答える 1

3

テンプレートは、ヘッダー ファイルで定義する必要があります。ソース ファイルとヘッダー ファイルでテンプレート クラス/関数の実装を分離することはできません。

その理由は、テンプレートは C++ のコンパイル時の「機能」であり、その実装はコンパイル時に可視でなければならないからです。

于 2012-07-07T10:22:33.263 に答える