push_back указатель на вектор указателей - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть два класса: Item и Box. В Box.h у меня есть:

class Box {
  vector<const Item *> BoxItems;

   public:
   void AddItem(const Item *i);
}

В Box.cpp:

void Box::AddItem(const Item *i) {
  BoxItems.push_back(*i);
}

Только для справки, но в main.cpp:

box.AddItem(&items[0]);

Проблема: при компиляции я получаю error: no matching member function for call to 'push_back', ссылаясь на push_back из вектора, который я создал в Box.h. Чего мне не хватает?

Пока я пробовал:

void Box::AddItem(const Item *i) {
  this -> BoxItems.push_back(*i);
  Box::BoxItems.push_back(*i);
  BoxItems->push_back(*i);
}

Но все еще с той же ошибкой.

1 Ответ

0 голосов
/ 10 сентября 2018
void Box::AddItem(const Item *i) {
  BoxItems.push_back(*i);
}

Вы звоните push_back с Item, когда предполагается взять указатель на Item. Измените *i на i.

Однако я настоятельно рекомендую не использовать векторы указателей, потому что это очень затрудняет получение права собственности на объект. Вместо этого рассмотрите возможность использования векторов объектов, векторов unique_ptr s для объектов или векторов shared_ptr s для объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...