Проблема с инициализацией вектора вектора класса shared_ptr - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь инициализировать вектор вектора класса shared_ptr размером 19x19 (_goban).

class Goban
{
  public:
    Goban();
    ~Goban();
  private:
    vector<vector<shared_ptr<Cell>>> _goban;
};

Мой конструктор такой:

Goban::Goban() : _goban(18, vector<make_shared<Cell>>(18, new Cell))
{
}

Я могу 'не могу найти способ инициализации.

Я получил эту ошибку:

template <class _Tp, class _Allocator /* = allocator<_Tp> */>

Есть идеи?

1 Ответ

1 голос
/ 06 ноября 2019

Вы указали неверный аргумент шаблона make_shared<Cell>, который должен быть shared_ptr<Cell>. И обратите внимание, что неявное преобразование из необработанных указателей в std::shared_ptr запрещено. Тогда

Goban::Goban() : _goban(18, vector<shared_ptr<Cell>>(18, make_shared<Cell>()))
//                                 ^^^^^^^^^^^^^^^^      ^^^^^^^^^^^^^^^^^^^
{
}

С помощью руководства по вычетам вы даже можете опустить указание аргумента шаблона как

Goban::Goban() : _goban(18, vector(18, make_shared<Cell>()))
{
}
...