g ++编译模板文件

时间:2017-03-04 07:11:22

标签: c++ g++

所以我有这段代码:

// HashTable.hpp:

 template <class dataType>
    class HashTable
    {
    public:

    //Something
    public:
                                                        HashTable();
                                                        HashTable(unsigned int & tableSize);

// HashTable.cpp:

#include "HashTable.hpp"


template <class dataType>
HashTable<dataType>::HashTable()
{

}

现在,在main()体中,我只是实例化一个对象HashTable<int> hTable。使用g ++编译时,我收到此错误:

`EntryPoint.cpp:(.text+0x1f): undefined reference to `HashTable<int>::HashTable()  '
 collect2: error: ld returned 1 exit status`

是什么导致了这个问题?我记得几个月前我做了一些模板化的数据结构,但是我只是通过在入口点的.cpp文件中包含file.cpp,以一种容易出错的方式快速修复它。 如何以干净的方式解决这个问题?我已经尝试创建目标文件并单独链接它们,但我只是得到了相同的错误。这个特定的问题让我感到沮丧,因为我刚刚停止了模板工作(丢失了大约10个小时研究它)。我不想强迫函数作为内联,因为这是解决这个问题的一种非常混乱的方式。另外,我会避免使用HashTable.cpp而不是HashTable.hpp,因为这会覆盖头文件的概念。我希望我的类尽可能抽象,所以我可以将它用于我稍后创建的所有数据类型。

另外,我知道这可以通过显式实例来解决,但我希望能够将它与任何类型一起使用而不必“膨胀”代码。

0 个答案:

没有答案