Невозможно указать явный инициализатор для массивов с указателями - PullRequest
0 голосов
/ 29 августа 2018

Я компилирую с VS2013, и у меня возникла проблема с приведенным ниже кодом, так как я получаю сообщение об ошибке, не могу указать явный инициализатор для массивов:

struct OctreeNode
    {
        OctreeNode* child[8] = { nullptr };

        std::vector<const Extents *> nodeExtentsList; 
        Extents nodeExtents;
        bool isLeaf = true;
    };

Ошибка, которую я получаю:

Ошибка 3: ошибка C2536: «BVH :: Octree :: OctreeNode :: BVH :: Octree :: OctreeNode :: child»: невозможно указать явный инициализатор для массивов

Если кто-нибудь сталкивался с этой проблемой, пожалуйста, сообщите.

1 Ответ

0 голосов
/ 29 августа 2018

Если вы не хотите обновляться до VS2017, вы должны справиться с этим и по-другому инициализировать ваш массив, например, в конструкторе (структуры могут иметь конструкторы в C ++):

struct OctreeNode
{
  OctreeNode* child[8];

  std::vector<const int *> nodeExtentsList;
  int nodeExtents;
  bool isLeaf = true;

  OctreeNode() { for (auto & p : child) p = nullptr; }; //<< constructor
};

и если это не скомпилируется, попробуйте этот конструктор:

OctreeNode()
  { for (int i = 0; i < _countof(child); i++) child[i] = nullptr; };
...