You need to set your Terrain’s buffers before calling DrawIndexedPrimitives.
When you call Terrain::GetVertices() in your Terrain constructor you’re setting the vertex buffer but that isn’t the correct place to do it. You need to do it before you draw your terrain and make sure it is rebound EVERY time you draw your terrain, not in your constructor.
You can still do the work of GetVertices() and such, but don’t bind the buffers - unless it’s a “throwaway” object intended for use in a “using” block you should never be doing that.
In short, your buffer bindings are being scrambled by the tank.
I have no idea what you have going on with the index buffer for the terrain. Looks like you’re not using it and triangle_strip rendering is just figuring things out … which is another way for everything to be mangled if that’s the case as you probably still have your Tank’s index buffer bound as well.
30 second run down on working with graphics APIs: it’s all one big state-machine. Anything you set or activate will remain set or active until you change it. So before you do anything you need to make sure you’ve set the conditions to those that you desire to do what you want.
Here, you’ve set the buffer, but done it in the wrong place - so it worked, until you introduced something (the tank) that exposed that your state sequence was brittle.