c ++将模板类的一部分制作成header和cpp

时间:2017-06-05 15:19:09

标签: c++ c++11

我有一个list_sorter类,它获取T类型列表并对其进行排序。 有我的问题:它在一个cpp文件中工作。当我尝试将其分解为头文件和另一个cpp文件时,我得到对`list_sorter :: list_sorter(std :: __ cxx11 :: list>)'的未定义引用。 我已经阅读了很多例子,但无法解决这个问题。

有人可以帮助我,我做错了什么?我应该改变什么? 请查看我的文件和代码:

listsort.h:

#ifndef listsort
#define listsort
#include<list>

template <typename T>
class list_sorter{  
    private:
    std::list<T> adat;

    public:
    list_sorter(std::list<T> be);
    void add(std::list<T> uj);
    void print();
};
#endif

list_sorter.cpp:

#include<list>
#include"listsort.h"
template <typename T>
class list_sorter{  
    private:
    std::list<T> adat;

    public:
    list_sorter(std::list<T> be): adat(be) { adat.sort();}
    void add(std::list<T> uj){
        for(auto a:uj) adat.push_back(a);
        adat.sort();
    }
    void print(){for(auto a:adat) cout<<a<<" ";}
};

try.cpp:

#include"listsort.h"
#include<iostream>
#include<list>

using namespace std;

int main(){
    list<int> tombocske;

    tombocske.push_back(70);
    tombocske.push_back(7);
    tombocske.push_back(2);
    tombocske.push_back(12); 

    list_sorter<int> rendezo(tombocske); 
    rendezo.print(); cout<<endl<<endl;

    list<int> tili;
    tili.push_back(45);
    tili.push_back(1);
    tili.push_back(32);
    tili.push_back(7);

    rendezo.add(tili);
    rendezo.print();

    list<string> tali;
    tali.push_back("gyozo");
    tali.push_back("kave");
    tali.push_back("alma");
    tali.push_back("pipa");

    list_sorter<string> rendezo2(tali);

    rendezo2.print();

}

0 个答案:

没有答案