扩展向量并调用push_back函数

时间:2015-10-16 20:00:08

标签: c++ c++11 vector

因此,对于学校的任务,我们必须将Linear Hashing实现为一个类,该类派生自包含指向块列表类的唯一指针的向量。

现在每当我尝试使用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,但是在做算法的过程中却把它扔进去,这让我很难理解这一点。

1 个答案:

答案 0 :(得分:1)

正如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)));
}