Cyclic dependencies are a common design mistake in software development. Game development might be more susceptible to it, since you have a lot moving parts which have to depend on another in some way.
If you're overusing cyclic dependencies your code will turn into one tightly coupled mess.
Suppose you have Sprite class to render the player sprite on screen, a PhysicObject class for movement&collision detection, a Animator class to animate the player sprite, a PlayerControl class to apply user input to the player character.
If each class knows about the others you cannot use just a subset of these. An invisible wall might just consist of the PhysicObject. A wooden crate consist of a Sprite and a PhysicsObject and so on.
If classes have to speak to each other it is better to use an event system. Or have a parent class which encapsulates common data members. Child classes are also data members of the parent class and just manipulate the data members of the parent.
There is no single right ways to structure a game.
Another problem with cyclic dependencies is what if one of the classes is deleted? If the Foo object is deleted the Bar object has an invalid pointer and will cause an error the next time it tries to access it.
You also cannot use boosts shared pointer class if you have cyclic dependencies. Shared pointer will delete the object it points to if there are no more references to it. But if Foo points to Bar and Bar points to Foo, Foo and Bar will never be deleted and you have a memory leak.
Game entities with components:
http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
I'm reading Mike McShaffry's "Game Coding Complete" which give a quite good overview how to design and build games. It also has a bunch of code samples. Might be worth a look ;)
Regarding your code sample:
Use inclusion guards to avoid multiple includes of the same header file:
#ifndef BAR_H
#define BAR_H
class BAR {
//class definition
};
#endif
or if you're using Visual Studio:
#pragma once
class BAR {
//class definition
};
This will stop the compiler from complaining.