В этих операторах
T& operator[](const std::array<int,2> index){
return matrix(index);
}
T& operator[](const std::array<int,2>& index) const{
return matrix(index);
}
вы пытаетесь вызвать несуществующую операторную функцию шаблона класса std :: map
matrix(index)
Очевидно, что вы имеете в виду в первый оператор индекса
matrix[index]
T& operator[](const std::array<int,2> &index){
return matrix[index];
}
и второй оператор индекса функции-члена в.
const T& operator[](const std::array<int,2>& index) const{
return matrix.at(index);
}
Также должен быть объявлен второй оператор с возвращаемым типом, квалифицированным с квалификатором const, который является он должен возвращать постоянную ссылку, потому что функция-член в свою очередь является постоянной функцией.