Тип bit_table_
равен unsigned char [10][100]
, который будет затухать (то есть компилятор позволяет неявно преобразовывать его в) в unsigned char (*)[100]
, то есть указатель на массив 100 unsigned chars
.
std::fill_n(bit_table_, ...)
затем создается как:
std::fill_n(unsigned char (*)[100], ...)
, что означает, что оно ожидает значение типа unsigned char [100]
для инициализации bit_table_
с. 0
не конвертируется в этот тип, поэтому компиляция не удалась.
Еще один способ думать об этом - то, что функции STL, которые имеют дело с итераторами, имеют дело только с одним измерением. Если вы передаете многомерную структуру, эти функции STL будут работать только с одним измерением.
В конце концов, вы не можете этого сделать; нет способа присвоить типу массива. То есть, поскольку вы не можете сделать это:
char table[100];
char another_table[100]= { };
table= another_table;
вы не можете использовать std::fill_n
для многомерных массивов.