Ошибка при использовании std :: allocator в классе шаблона - PullRequest
1 голос
/ 26 мая 2019

Попытка выяснить, как использовать std :: allocator.

#include <iostream>

template <typename T, typename A>
struct vector_base
{
  A       allocator;
  T*      data;
  size_t  size;
  size_t  space;

  vector_base(const A &alloc, size_t n)
    :allocator(alloc), data(alloc.allocate(n)), size(n), space(n)
  {}

  ~vector_base() {allocator.deallocate(data, space);}
};

int main() {
  std::allocator<int> my_allocator;
  vector_base<int, std::allocator<int>> vector(my_allocator, 10);

  return 0;
}

Ошибка:

ошибка: передача const std :: allocator в качестве аргумента this сбрасывает квалификаторы [-fpermissive] : распределитель (alloc), данные (alloc.allocate (n)), размер (n), пробел (n)

1 Ответ

4 голосов
/ 26 мая 2019

alloc - это const&, вы пытаетесь вызвать allocate для него, который является неконстантным методом, который не разрешен.

Позвоните allocate на ваш инициализированный участник вместо:

  vector_base(const A &alloc, size_t n)
    :allocator(alloc), data(allocator.allocate(n)), size(n), space(n)
  {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...