У меня есть класс OpenTable
в моем коде:
class OpenTable : public BaseAction {
public:
OpenTable(int id, std::vector<Customer *> &customersList);
OpenTable(const OpenTable& other);
private:
const int tableId;
const std::vector<Customer *> customers;
};
Мне нужно реализовать конструктор копирования для этого класса (я знаю, что это, вероятно, плохой дизайн, но я получил указание сделать это). Я столкнулся с проблемой при попытке глубокого копирования константного вектора customers
.
Я попробовал следующее:
OpenTable::OpenTable(const OpenTable& other): tableId(other.tableId)
{
for(std::vector<Customer*>::const_iterator i=other.customers.begin(); i!=other.customers.end(); i++) {
customers.push_back((*i)->copy()); // copy returns a Customer*
}
Но, очевидно, он не компилируется, вероятно, потому что вектор const
, поэтому я не могу добавить к нему элементы.
Я получаю следующую ошибку:
no instance of overloaded function "std::vector<_Tp, _Alloc>::push_back
[with _Tp=Customer *, _Alloc=std::allocator<Customer *>]" matches the
argument list and object (the object has type qualifiers that prevent a
match) -- argument types are: (Customer *) -- object type is: const
std::vector<Customer *, std::allocator<Customer *>>
Примечание: в параметризованном конструкторе я просто копировал, потому что мог. Это не будет работать для конструктора копирования.
Заранее спасибо.