2015-04-19 46 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(O,P,假);'创建*内存泄漏*,则分配内存并取消引用返回的指针,然后丢弃指针。相反,例如'_grid [i] [j] =单元格(...);'。 –

+0

另外,在发布有关构建错误的问题时,请在问题中包含完整和未编辑的构建日志,并在代码中标出错误的位置。请修改您的问题以包含该信息。 –

+1

但是,考虑一下'std :: array'非常像普通数组,因此数组中的对象将在创建数组时创建,因此您需要一个* default *构造函数。如果你不做任何特殊的阵列构造。 –

回答

2

std::arraydefault constructs包含的元素的默认构造函数。因此,SudokuGrid::Cell必须具有一个默认的构造:

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

完整的代码可在:http://goo.gl/CdpCH6