You need to replace the collision handling to use physics solvers instead of "stop all movement". Most collision detection code is just that - detection.
Here's what certain engines do:
Physics is handled on a separate thread / module. In order to obtain desirable results, movement solving is done over several iterations PER frame.
Since you're building using C++, I'd recommend looking into the free Chipmunk Physics C++ library. Alternatively you can write quasi-physics by following your own rules as mentioned.
I'm rusty in physics but you should be able to calculate angle of incidence (into the wall or another tank) based on movement vector of both objects. Since the wall is static it will work itself out. When two objects collide, a third party (collision handler with body A and body B) will decide the results. If both objects were tanks, you'll be happy that both can conserve momentum and "bounce" or "slide" correctly based on the same application of physics.
If you want to step it up - and your tanks are not all the same size, you can take weight and momentum into account.