我正在尝试构建一个简单的堆数据结构以进行练习。当我为double
构建版本时,它可以正常工作。
class heapt {
public:
heapt();
heapt(std::initializer_list<Elem> lst);
void print_heapt();
private:
int size;
int length;
double* elem; //points to root
};
它的构造函数可以完美地工作,并且堆应该被正确打印。但是,当我尝试使用
将其推广时template< typename Elem>
as:
template<typename Elem>
class heapt {
public:
heapt();
heapt(std::initializer_list<double> lst);
void print_heapt();
private:
int size;
int length;
Elem* elem; //points to root
};
用于类定义,且为:
template<typename Elem>
heapt<Elem>::heapt(std::initializer_list<Elem> lst) :
size{ static_cast<int>(lst.size()) },
elem{new Elem[lst.size()]}
{
std::copy(lst.begin(), lst.end(), elem);//Now heaptify elem
build_heapt(elem, lst.size());
}
用于主函数中使用的构造函数之一。
我遇到两个链接错误:
LNK2019无法解析的外部符号“ public:void __thiscall heapt :: print_heapt(void)”(?print_heapt @?$ heapt @ H @@ QAEXXZ)在函数_main中引用]
LNK2019
未解析的外部符号“ public:__thiscall heapt :: heapt(class std :: initializer_list)”(?? 0?$ heapt @ H @@ QAE @ V?$ initializer_list @ H @ std @@@ Z)在函数_main中引用>主要功能是:
{ heapt<int> hh{ 27,12,3,13,2,4,14,5 }; std::cout << "Hello" << '\n'; hh.print_heapt(); }
我正在尝试构建一个简单的堆数据结构以进行练习。当我将版本翻倍时,它可以正常工作。 class heapt {public:heapt(); heapt(std :: initializer_list
lst); ...
在模板化类声明中,您正在使用heapt(std::initializer_list<double> lst);
,但在定义中,您正在使用std::initializer_list<Elem>
。您应该将声明更改为heapt(std::initializer_list<Elem> lst);
您仍然缺少print_heapt和build_heapt的定义,但否则应编译。