void TimerExpired(TAny* aTimer,TInt aError);
is necessary in your class too. The virtual is optional (there is a saying: "once virtual, always virtual", so whenever you override a virtual method you inherited from somewhere else, that is going to be virtual regardless of specifying that again or not), the =0 must not be there (it says that there will be no implementation for the method, while in your case the point is that you want to implement it).
Chances are that the timer already does something, and maybe that is why you get the panic. Consider debugging the code. If you enable Just In Time debugging in the preferences of the emulator (Tools menu or something like that), and debug the code from Carbide.c++, it will show you the exact location of the panic. If you encounter some ECMT error when trying, you may have to indicate your Java version in the config file as described here: