Deduzco que crees, erroneamente, que la instruccion trama[i] es lo mismo que i, puesto que dices que al hacer trama[i] = 2, crees estar inicializando a i, cuando en realidad estas inicializando una expresion donde i esta involucrada.
i = 2 seria la manera de inicializar a i
Cambiando el codigo que presentas, aun definiendo la variable i sin inicializar, pero cambiandola en el comienzo del ciclo, quedaria
Código C++:
Ver originalint i;
for(i=2; trama[i]<='['; i++)
longitud[i]=trama[i];
La comparacion del ciclo for (trama[i] <= "[") tambien parece extraña.