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