Game Module Structure Question

I've been slowly chugging along in my SDL game learning process, but a problem is becoming more apparent as my game becomes more and more complicated.

I've been basing the design in my head along the lines of having each "area" managed by a Manager class to organise smaller elements. I.e. A Player Manager, GUI Manager etc.

Things started to get problematic, once I had gui elements trying to access player objects, but not being able to see the player manager (I declared the Player Manager object in main()). I've tried to declare the Player Manager outside of main as a global variable, etc but i usually end of getting undefined symbol errors.

My question is: Should I persist in this line of design? Is having manager classes a good idea? or is there some other idea I should follow? If it is the best idea, is there some way of making C++ classes globally accessible to all?

Is there an easy way to create a global instance of a class? As I mentioned before Im trying to make it global but it doesnt seem to permeate. I havent yet tried it as a static though, I'll see if that fixes the problem.

From The Game Programming Wiki I found this.
GPWiki is always a good place for a quick look up, I'm surprised it isn't linked by idevgames, and I think that people here should contribute. It's for all platforms...

While singletons are useful, they can bite you in the long run. What I do is make an Application class, which is a singleton ( since there can, by definition, be only one running app ) and have it have pointers to my TextureManager, SoundManager, MusicManager, Hud, World, and so on. This makes for a fairly clean design.

Plus, it makes it super easy to subclass my Manager classes and assign them to my Application.