Ошибка при использовании конструктора копирования класса шаблона - PullRequest
0 голосов
/ 15 июня 2019

Не могу написать конструктор копирования.Как исправить ошибку?

Попытался исправить это так:

template<typename T, typename A>
vector<T, A>::vector(const vector<T, A> &other)
{
    this->allocator_ = other.allocator_;
    this->size_ = other.size_;
    this->space_ = other.space_;
    this->data_ = other.allocator_.allocate(other.space_);

  std::copy(other.data_, other.data_ + other.size_, this->data_);
}
template <typename T, typename A = std::allocator<T>>
struct vector_base
{
  A    allocator_;
  int  size_;
  int  space_;
  T*   data_;

  vector_base(A const& alloc, int n)
      :allocator_(alloc)
  {
    if (n > 1)
    {
      data_ = allocator_.allocate(n); size_ = 0, space_ = n;
    }
    else
    {
      data_ = allocator_.allocate(8); size_ = 0, space_ = 8;
    }
  }

  ~vector_base() {allocator_.deallocate(data_, space_);}
};
class vector : protected vector_base<T, A> 
{
  vector(vector<T, A> const &v);
  vector<T, A>& operator=(vector<T, A> const &v);
};

template<typename T, typename A>
vector<T, A>::vector(const vector<T, A> &other)
  : allocator_(other.allocator_), size_(other.size_), space_(other.space_), data_(other.allocator_.allocate(other.space_))
{

  std::copy(other.data_, other.data_ + other.size_, this->data_);
}

template<typename T, typename A>
vector<T, A> &vector<T, A>::operator=(vector<T, A> const &v)
{
  if (this != &v)
  {
    vector<T, A> copy_vector(v);
    copy_vector.swap(*this);
  }
  return *this;
}

error: класс 'vector' не имеет никакого поля с именем 'allocator_': allocator_ (other.allocator_), size_ (other.size_), space_ (other.space_), data_ (other.allocator_.allocate (other.space _)) *

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