Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++;? 我的C++程序中,我有以下代码:_C++_Templates - Fatal编程技术网

在C++;? 我的C++程序中,我有以下代码:

在C++;? 我的C++程序中,我有以下代码:,c++,templates,C++,Templates,FileInit(游戏文件、主机、堆、设置) 在头文件中: 模板 void FileInit(std::ifstream和gamefile,std::deque和master, poorman_堆和堆、设置和设置) 其中,poorman_堆在其自己的头文件中定义为: 模板 模板 poorman_堆::poorman_堆( 输入计数器启动, 输入端, COMP COMP ){ 但是当我尝试在堆中传递(在第一行中)时,我得到了错误: 对“void FileInit(std::basic_ifst

FileInit(游戏文件、主机、堆、设置)

在头文件中:

模板

void FileInit(std::ifstream和gamefile,std::deque和master, poorman_堆和堆、设置和设置)

其中,poorman_堆在其自己的头文件中定义为:


模板
模板
poorman_堆::poorman_堆(
输入计数器启动,
输入端,
COMP COMP
){

但是当我尝试在堆中传递(在第一行中)时,我得到了错误:


对“void FileInit(std::basic_ifstream>&,std::deque>&,poorman_heap&,settings&)”的未定义引用

collect2:错误:ld返回了1个退出状态 make:[notld]错误1


如果我不尝试传入heap,一切正常,因此我知道我已经正确链接了文件(这在过去对我来说是个问题),但我不知道如何将模板对象传入函数。非常感谢任何帮助!

您必须将模板参数提供给poorman\u heap

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

必须将模板参数提供给poorman\u heap

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

它可以为我链接,但我必须将模板添加到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){
}
模板
类poorman_堆{
模板
poorman_堆(输入计数器开始、输入计数器结束、复合);
};
模板
模板
poorman_堆::poorman_堆(输入计数器开始、输入计数器结束、复合){
}
类设置{};
模板
void FileInit(std::ifstream&gamefile,std::deque&master,poorman_heap&heap,settings&set){
}

它可以为我链接,但我必须将模板添加到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){
}
模板
类poorman_堆{
模板
poorman_堆(输入计数器开始、输入计数器结束、复合);
};
模板
模板
poorman_堆::poorman_堆(输入计数器开始、输入计数器结束、复合){
}
类设置{};
模板
void FileInit(std::ifstream&gamefile,std::deque&master,poorman_heap&heap,settings&set){
}

InputIterator仅在构造函数中使用,但是-对于poorman_heap中的其他方法,仅使用TYPE和COMP。是否仍需要将InputIterator作为模板参数?您可能还必须将模板参数传递给std::deque@camdroid,是的,因为它不是“类型”除非它拥有编译器在编译时实际生成类型所需的一切。@camdroid,poorman_heap的类声明是什么样子的?如果它有模板参数,那么在使用poorman_heap时必须指定这些参数。在类声明之外,它只有类型,COMP-inputiator仅用作构造函数。我已将其更改为您所说的,现在我得到了错误:
调用-FileInit时没有匹配的函数(std::ifstream&,std::deque&,poorman_heap&,settings&)–
现在,我只是这样声明heap:
poorman_heap heap
如果不使用new,我如何将InputIterator放在那里?InputIterator只在构造函数中使用,但是-对于poorman_heap中的其他方法,只使用TYPE和COMP。我还需要将InputIterator作为模板参数吗?您也可以这样做必须将模板参数传递给std::deque@camdroid,是的,因为它不是“类型”除非它拥有编译器在编译时实际生成类型所需的一切。@camdroid,poorman_heap的类声明是什么样子的?如果它有模板参数,那么在使用poorman_heap时必须指定这些参数。在类声明之外,它只有类型,COMP-inputiator仅用作构造函数。我已将其更改为您所说的,现在我得到了错误:
没有用于调用-FileInit(std::ifstream&,std::deque&,poorman_heap&,settings&)的匹配函数
现在,我只是像这样声明heap:
poorman_heap
,如果不使用new,我如何在其中放置一个InputIterator?