You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++哈希表实现:如何在一个头文件中调用另一头文件类的公共成员

问题原因

  • 成员函数归属错误:你将get_key()、get_value()定义在了B类中,但key、value是A类的公共成员,B类本身没有这两个成员,因此编译会报key未在当前作用域声明。同时你调用时是用A类实例table[hashindex]调用get_key(),但该方法属于B类,自然会报对应类没有该成员的错误。
  • 构造函数笔误:A类的无参构造函数中你写了empty = true,但实际定义的成员变量名是isempty,这个问题也会导致编译报错。
  • 返回值类型错误:你定义的get_key()返回值为A<X,Y>*,但A类中key的类型是模板参数X,类型完全不匹配。

修复方案

你不需要额外写get_key、get_value方法,A类的key和value本身就是公共成员,可以直接访问。

  1. 首先删除B类中你后加的两个错误的get_key()、get_value()成员函数。
  2. 修改A类的无参构造函数笔误:
A<X,Y>(){
    isempty = true; // 把empty改为isempty
    isremoved = false;
}
  1. 修改search函数的实现,直接访问A类的公共成员:
template<typename X, typename Y>
A<X,Y>* B<X,Y>::search(const X& key){
    int hashindex = hashfunction(key); 
    if(table[hashindex].key == key)
        // 返回匹配到的A类实例的指针
        return &table[hashindex];
    // 补充未找到的返回逻辑,避免编译警告
    return nullptr;
}

逻辑疑问解答

你声明A<X,Y>* table并在B的构造函数中new了数组,已经完成了A类实例的创建,这个逻辑没有问题,错误全部来自成员归属和调用逻辑的混淆。

内容的提问来源于stack exchange,提问作者suckatcoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:24:10