当我尝试使用模板扩展类时,出现链接错误(LINK 2019)

问题描述 投票:0回答:1

我正在尝试构建一个简单的堆数据结构以进行练习。当我为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); ...

c++ visual-studio compiler-errors linker lnk2019
1个回答
0
投票

在模板化类声明中,您正在使用heapt(std::initializer_list<double> lst);,但在定义中,您正在使用std::initializer_list<Elem>。您应该将声明更改为heapt(std::initializer_list<Elem> lst);

您仍然缺少print_heapt和build_heapt的定义,但否则应编译。

© www.soinside.com 2019 - 2024. All rights reserved.