class Sprite{public: // snip (but use the constructor instead of Initialise) LPD3DXSPRITE GetSprite(){ return m_Sprite; }};class Menu{public: // snip void Render(Sprite &S){ LPD3DXSPRITE Temp=S.GetSprite(); DoStuffWithIt(Temp); }};
Or in other words, stop trying to make the sprite pointer exist everywhere and just pass the parameters you need to the functions that use them.
Even better, hide the implementation detail of D3DXSprite behind a public interface in your Sprite class and use this interface everywhere else. But pass Sprite as a parameter to Menu's render function. Menu's SetOptionText() method (random example picked from air) does not need to access rendering stuff so should not have access to the rendering stuff.