因此,对于学校的一项任务,我们必须将线性散列实现为一个类,该类是从包含指向阻止列表类的唯一指针的向量派生的。

现在,每当我尝试使用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/

10-09 12:37