Es un error de tipeo seguro, tal vez debido a poner dos bucles en una misma linea ...
Justamente en el operador +, tu codigo es:
for(int i=0;i<length;i++) for(int j=0;j<length;i++) temp.a[i][j]=a[i][j]+B.a[i][j];
Expresado de una manera legible aunque todavia incorrecta:
for (int i = 0; i < length; i++)
{
for(int j = 0; j < length; i++)
{
temp.a[i][j] = a[i][j] + B.a[i][j];
}
}
Prestale atencion a la expresion de contador del segundo bucle: es i++ igual que el primero en lugar de ser j++.
Segui vos y depurando el programa.