0

私の C++ プログラムには、次のコードがあります。

FileInit(gamefile, master, heap, settings);

ヘッダーファイルで:

template < typename TYPE, typename COMP>

void FileInit(std::ifstream &gamefile, std::deque &master, poorman_heap &heap, settings &set);

ここで、poorman_heap は独自のヘッダー ファイルで次のように定義されます。

template< typename TYPE, typename COMP> template< typename InputIterator> poorman_heap::poorman_heap( InputIterator start, InputIterator end, COMP comp ) {

しかし、(最初の行で) ヒープを渡そうとすると、次のエラーが発生します。

undefined reference to `void FileInit(std::basic_ifstream >&, std::deque >&, poorman_heap&, settings&)'

collect2: error: ld returned 1 exit status make: * [notld] Error 1

ヒープに渡そうとしない場合、すべてが機能するので、ファイルを正しくリンクしていることはわかっていますが (これは過去に私にとって問題でした)、テンプレート化されたオブジェクトをに渡す方法がわかりません関数。どんな助けでも大歓迎です!

4

2 に答える 2

2

リンクすることはできましたが、テンプレートを FileInit に追加する必要がありました。

template< typename TYPE, typename COMP>
class poorman_heap{
        template< typename InputIterator>
        poorman_heap( InputIterator start, InputIterator end, COMP comp ) ;
};


template< typename TYPE, typename COMP>
        template< typename InputIterator>
poorman_heap<TYPE, COMP>::poorman_heap( InputIterator start, InputIterator end, COMP comp ) {
}

class settings {};


template < typename TYPE, typename COMP>
void FileInit(std::ifstream &gamefile, std::deque<int> &master, poorman_heap<TYPE,COMP> &heap, settings &set){
}
于 2013-02-22T04:56:24.290 に答える
1

テンプレート パラメーターを poorman_heap に渡す必要があります。

template < typename TYPE, typename COMP>
void FileInit(std::ifstream &gamefile, std::deque &master, poorman_heap<TYPE, COMP> &heap, settings &set); 
于 2013-02-22T04:37:59.537 に答える