C++ vector.push_back报no matching function调用错误的原因是什么
报错原因
- 核心类型不匹配:你声明的
vector_类型是std::vector<ChainingTable<int>::Record>,是存储Record对象本身的容器,其push_back方法要求传入Record类型的实例。但你代码中new Record(key, value)的返回值是Record*指针类型,编译器找不到接收指针参数的push_back重载,因此抛出匹配失败错误。 - 额外逻辑错误:代码中
std::vector<Record> vector_ = records_[idx];是值拷贝操作,你对vector_做的所有修改(包括更新已有key对应的value、插入新记录)都只会作用在本地拷贝变量上,不会同步到类成员records_数组中,就算编译通过逻辑也不符合预期。
修复方案
- 将
vector_改为引用类型,让修改直接作用在原成员数组上:
// 加&变成左值引用 std::vector<Record>& vector_ = records_[idx];
- 插入新记录时去掉
new,直接构造Record对象即可,也可以用emplace_back减少一次拷贝提升性能:
// 写法1:直接传临时对象 vector_.push_back(Record(key, value)); // 写法2:更推荐的emplace_back,直接在容器内部构造对象 vector_.emplace_back(key, value);
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

