quadtree генерирует неполный тип - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь реализовать квадродерево и хочу поместить его в библиотеку, чтобы мне не приходилось копировать и реорганизовывать код каждый раз, когда он мне нужен. Я придумал интерфейсы hasPos и hasDim, чтобы у меня были прямоугольные объекты для работы:

class hasPos {
protected:
  vec2 pos;
};

class hasDim: public hasPos {
protected:
  vec2 dim;
  // ...
};

template<int capacity, typename t, typename = std::enable_if<std::is_base_of<hasDim, t>::value && std::is_pointer<t>::value>>
class quadtree {
  quadtree<capacity, t> nw, ne, sw, se; // for subdivision when capacity is exceeded
  // ...
};

Когда я компилирую библиотеку, она работает просто отлично, но когда я компилирую проект с quadtree в нем, компилятор жалуется на неполный тип:

error: 'quadtree<capacity, t, <template-parameter-1-3> >::ne' has incomplete type

Это действительно выглядит так, как будто std::enable_if является проблемой.

РЕДАКТИРОВАТЬ:

Как предлагается в комментариях, я превратил nw, ne, sw, se в *nw, *ne, *sw, *se. Казалось, что это работает, но через несколько часов он снова жалуется на неполный тип после того, как я переместил реализацию в модуль компиляции:

bin.cpp:32:40: error: invalid use of incomplete type 'struct quadtree<capacity, t>'
   32 |  void quadtree<capacity, t>::addObj(t o) {
      |
...