Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
1 / 1 / 1
Регистрация: 02.03.2013
Сообщений: 151
1

Конструктор копирования для шаблонного класса

15.06.2019, 09:00. Просмотров 248. Ответов 1

Не могу написать конструктор копирования для следующего класса:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);
};
 
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_);
}


Компилятор выдаёт следующую ошибку:
error: class ‘vector<T, A>’ does not have any field named ‘allocator_’
: allocator_(other.allocator_), size_(other.size_), space_(other.space_), data_(other.allocator_.allocate(other.space_))

Как это можно поправить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2019, 09:00
Ответы с готовыми решениями:

Конструктор копирования шаблонного класса
Всем доброго времени суток! Язык С++ изучаю относительно недавно и столкнулся с задачей, которую не...

Конструктор копий для шаблонного класса(связный список)
Не совсем понятно как копировать объекты из динамической памяти, в частности правильная реализация...

Конструктор копирования для класса стек
Почему не хочет работать конструктор копирования? struct Item { int value; Item *next;...

Cделать конструктор по умолчанию и копирования для класса
Вот у меня класс строка: class strg { char *str; int len; public: strg(); strg(const...

1
Модератор
Эксперт С++
9913 / 8436 / 5129
Регистрация: 18.12.2011
Сообщений: 22,581
15.06.2019, 10:13 2
Вот так компилируется
C++
1
2
3
4
5
6
7
8
9
10
template <typename T, typename A>
class vector : public vector_base<T, A>
{
public:
    vector<T, A>(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_);
    }
};
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2019, 10:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Конструктор копирования для динамического объекта класса приемника
class first_class { public: first_class(int q) { m_q=q; cout&lt;&lt;&quot;First class say...

Конструктор копирования для класса с указателем на абстрактный класс
Всем привет. Как реализовать конструктор копирования для класса Foo? class Base { public: ...

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act =...

Для шаблонного класса перегрузить оператор присваивания, copy-конструктор, объекты cin и cout, оператор *
Помогите в следующем: Для класса шаблона следует перегрузить оператор присваивания, конструктор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.