因此,对于学校的一项任务,我们必须将线性散列实现为一个类,该类是从包含指向阻止列表类的唯一指针的向量派生的。
现在,每当我尝试使用push_back添加元素时,都会得到:No matching member function for call to 'push_back'
。但是,当我尝试运行this->size()
时,它确实起作用。
我的代码:
template <class Key, class Data>
class Linhash : public std::vector<std::unique_ptr<Blocklist<Key, Data>>> {
public:
Linhash<Key, Data>(Disk<Block<Key, Data>>* disk)
: std::vector<std::unique_ptr<Blocklist<Key, Data>>>() {
this->disk = disk;
}
void add(Key k, Data d);
};
template <class Key, class Data>
void Linhash<Key, Data>::add(Key k, Data d) {
// This works
this->size();
// This doesn't work
Blocklist<Key, Data> bl(this->disk);
this->push_back(bl);
}
我敢打赌,我将错误的对象推入push_back函数(这与unique_ptr的关系),但是我不确定。同样,我们没有在我们的课程中学习unique_ptr,但是在执行算法时却陷入其中,这让我很难真正理解这一点。
最佳答案
正如Igor Tandetnik所指出的,我只需要将它包装在一个unique_ptr对象中,就可以了。
所以工作代码:
template <class Key, class Data>
class Linhash : public std::vector<std::unique_ptr<Blocklist<Key, Data>>> {
public:
Linhash<Key, Data>(Disk<Block<Key, Data>>* disk)
: std::vector<std::unique_ptr<Blocklist<Key, Data>>>() {
this->disk = disk;
}
void add(Key k, Data d);
};
template <class Key, class Data>
void Linhash<Key, Data>::add(Key k, Data d) {
// This works
this->size();
// This doesn't work
this->push_back(std::unique_ptr<Blocklist<Key, Data>>(new Blocklist<Key, Data>(this->disk)));
}
关于c++ - 扩展 vector 并调用push_back函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33178662/