所以我有这段代码:
// 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,因为这会覆盖头文件的概念。我希望我的类尽可能抽象,所以我可以将它用于我稍后创建的所有数据类型。
另外,我知道这可以通过显式实例来解决,但我希望能够将它与任何类型一起使用而不必“膨胀”代码。