Enviado em 04/06/2018 - 17:41h 
		O tamanho do objeto tem de ser determinado em tempo de compilação.  Assim sendo, 
arrays  tradicionais exigem que você tenha dimensões fixas.
No seu programa, você tem tamanhos constantes nas declarações que aparecem em 
main ().  Sendo fixos, você tem mais opções a usar.
Algumas alternativas são:
  • Usar 
containers  (provavelmente 
std::vector  da biblioteca padrão, ou algum equivalente do Qt, Boost ou do seu 
toolkit  favorito) para criar 
arrays  dinâmicos.  Entre suas vantagens estão ter um único tipo capaz de representar matrizes de quaisquer tamanhos e permitir que as matrizes sejam redimensionadas.  Por outro lado, o diagnóstico de operações irregulares (por exemplo: tentativas de operar com matrizes com tamanhos incompatíveis com a operação solicitada) só tem como acontecer em tempo de execução.
template <class T=double> 
  • Usar 
templates  com parâmetros numéricos que indicam as dimensões, criando efetivamente tipos distintos para matrizes com dimensões diferentes.  É vantajoso para fazer com que o compilador verifique a adequação de certas operações já em tempo de compilação, evitando que alguns erros lógicos apareçam apenas durante a execução.  Por outro lado, todas as matrizes teriam de ter dimensões estáticas, e corre-se o risco de que o tamanho de código gerado a partir de 
templates  ocupe muito espaço, já que cada especialização produz sua própria classe e suas próprias funções.  Além disso, embora o compilador possa interceptar erros lógicos, as mensagens mostradas podem não ser muito descritivas ou indicativas de como os corrigir, e ainda haverá casos de erros que só podem ser percebidos em tempo de execução.
template <size_t L, size_t C=L, class T=double> 
Entretanto, se você tivesse algo completamente variável, apenas a primeira das alternativas acima seria válida.
int main(){