2015-04-19 2 views
1

Итак, вот мой код, и моя ошибка error C2512: 'std::array<std::array<SudokuGrid::Cell,9>,9>' : no appropriate default constructor Я думал, что предоставляю это своим публичным определением, но мне что-то не хватает. Я пытался интегрировать ответ от this вопроса, но я не могу получить правильный методКонструктор для массива ячеек 2d структур

class SudokuGrid 
{ 
private: 
    struct Cell{ 
     int value; 
     bitset<9> pencils; 
     bool isSolved; 
     Cell(int i, bitset<9> p, bool s): 
      value{ i = 0 }, 
      pencils{ p.reset() }, 
      isSolved{ s = false }{} 
    }; 
    array < array < Cell, 9>, 9 > _grid; 

public: 
    SudokuGrid(string s) :_grid{} 
    { 
     for (int i = 0; i < 9; i++) 
      for (int j = 0; j < 9; j++) 
      { 
       bitset<9> p; 
       p.reset(); 
       _grid[i][j] = Cell(0, p, false); 
      } 
    } 
}; 
+0

выражение '* новый Cell (0, р, ложно),' создает утечку * памяти * выделить память и разыменовать возвращенный указатель, а затем просто выбросить указатель. Вместо этого, например, '_grid [i] [j] = Cell (...);'. –

+0

Кроме того, при размещении вопроса о ошибках сборки укажите полный и неотредактированный журнал сборки в вопросе и отметьте, где ошибка в показанном коде. Измените свой вопрос, чтобы включить эту информацию. –

+1

Однако подумайте, что 'std :: array' очень похож на обычный массив, поэтому объекты в массиве будут созданы при создании массива, поэтому вам нужен конструктор * default *. если вы не делаете специальной конструкции массива. –

ответ

2

конструктора по умолчанию std::arraydefault constructs элементов, которые он содержит. Поэтому SudokuGrid::Cell должен иметь конструктор по умолчанию:

Cell(): 
    value(0), 
    pencils(), 
    isSolved(false){} 

Полный код доступен по адресу: http://goo.gl/CdpCH6

Смежные вопросы