在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?