C++ 使用模板和继承时出现问题,错误架构x86_64的未定义符号:

C++ 使用模板和继承时出现问题,错误架构x86_64的未定义符号:,c++,templates,inheritance,polymorphism,hashtable,C++,Templates,Inheritance,Polymorphism,Hashtable,当我试图构建我的项目时,我遇到了这个问题,我的函数有6个未定义符号的错误: 显示最近的问题 未定义的符号:Hashint::deleteHash(int) 未定义的符号:Hashint::insertHash(int) 未定义符号:Hashint::searchHash(int) 未定义的符号:Hashint::print() 未定义符号:哈希表::哈希表(int) 未定义的符号:Hashint的vtable 我有一个带有内部类(项)的模板类: 模板 类哈希表 { 公众: 枚举状态{空、满、已删

当我试图构建我的项目时,我遇到了这个问题,我的函数有6个未定义符号的错误:

显示最近的问题 未定义的符号:Hashint::deleteHash(int)

未定义的符号:Hashint::insertHash(int)

未定义符号:Hashint::searchHash(int)

未定义的符号:Hashint::print()

未定义符号:哈希表::哈希表(int)

未定义的符号:Hashint的vtable

我有一个带有内部类(项)的模板类:

模板
类哈希表
{
公众:
枚举状态{空、满、已删除};
类项目
{
公众:
T数据;
K键;
国旗;
项(){}
项目(td,kk,状态f){data=d;key=K;flag=f;}
};
公众:
项目*表;
整数大小;
哈希表(int-sizeHash);
虚拟~HashTable(){}
虚拟int h1(K);
虚int h2(K);
//返回try编号i处键k的哈希表索引
虚拟整数散列(kk,inti);
virtual int searchHash(K);//搜索并返回索引
虚int insertHash(K);//insert
虚拟void deleteHash(K);//删除
虚拟空打印();
};
我的类Hashint继承自hashtable:

class Hashint : public HashTable<int,int>  {
   
public:
    int sizeTable;
    Item* table;
    
    
    Hashint(int size):HashTable<int, int>(size)
    {
        table= new Item [size];
        sizeTable = size;
        for (int i=0; i<sizeTable; i++)
            table[i].flag = empty;
    }
        
    int h1(int k);
    int h2(int k);
    int hash(int k, int i);
    int searchHash(int k);
    int insertHash(int k);
    void deleteHash(int k); 
    void print();    
};
类Hashint:公共哈希表{
公众:
int-sizeTable;
项目*表;
Hashint(int-size):哈希表(size)
{
表=新项目[尺寸];
sizeTable=大小;

对于(int i=0;i在实例化模板类之前,必须定义模板类中的函数。将函数定义添加到头文件中,它应该可以工作

检查此代码,例如:

// class templates
#include <iostream>
using namespace std;

template <class T>
class mypair {
T a, b;
public:
mypair (T first, T second)
  {a=first; b=second;}
T getmax ();
};

template <class T>
T mypair<T>::getmax ()
{
T retval;
retval = a>b? a : b;
return retval;
}

int main () {
mypair <int> myobject (100, 75);
cout << myobject.getmax();
return 0;
}
//类模板
#包括
使用名称空间std;
模板
类mypair{
Tα,b;
公众:
mypair(T第一,T第二)
{a=第一;b=第二;}
T getmax();
};
模板
T mypair::getmax()
{
T回顾;
retval=a>b?a:b;
返回返回;
}
int main(){
mypair myobject(100,75);

可能无法确保您在头文件而不是.cpp文件中实现了
哈希表
模板。在cpp文件中实现它将导致此类错误。我更改了它,我将所有内容都放在了.h文件中,但它仍然不工作…它显示了相同的错误,带有未定义的符号
// class templates
#include <iostream>
using namespace std;

template <class T>
class mypair {
T a, b;
public:
mypair (T first, T second)
  {a=first; b=second;}
T getmax ();
};

template <class T>
T mypair<T>::getmax ()
{
T retval;
retval = a>b? a : b;
return retval;
}

int main () {
mypair <int> myobject (100, 75);
cout << myobject.getmax();
return 0;
}