Hola! nose mucho de C++, pero tenes algunos errores
1º tenes problemas de punteros. Esto *at significa indireccion, osea "lo apuntado de at", es lo mismo hacer at[i].
2º usas nfa y nca, pero a esas variables nunca le diste un valor. Por lo que entiendo del codigo tendria que ser n y m, osea nfa=m y nca=n // si es q n son filas y m columnas de double **a
Si queres hacer matrices dinamicas debe ser:
Código C:
Ver originaldouble **trans(double **a, unsigned n, unsigned m) {
double nfa,nca; double **at;
at=new double *[nfa];
for(double i=0;i<m;i++)
at[i]=new double [nca];
for(double j=0;j<n;j++){
for(double k=0;k<m;k++)
at[k][j]=a[j][k];
}
return at;
}
fijate lo que retorno y lo que devuelve la funcion. Retorno at que es un puntero a puntero a double, por lo tanto la funcion debe devolver lo mismo.. Sino qdo muy claro el tema de la matriz dinamica, mira aca:
http://c.conclase.net/curso/?cap=013b
Saludos