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 回答