在C ++中传递模板化对象?

时间:2013-02-22 04:34:33

标签: c++ templates

在我的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

如果我不尝试传入堆,一切正常,所以我知道我已正确链接文件(过去这对我来说是一个问题),但我不知道如何传递模板将对象转换为函数。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分: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){
}

答案 1 :(得分:1)

您必须将模板参数提供给poorman_heap。

template < typename TYPE, typename COMP>
void FileInit(std::ifstream &gamefile, std::deque &master, poorman_heap<TYPE, COMP> &heap, settings &set);