In general, forward-declaring a class by itself does not indicate a bad design: this happens very often when your runtime dependency hierarchy is bidirectional. However, when the dependency graph is very dense (i.e. nearly every class depends on nearly all other classes) it is a valid reason to start worrying:
In your case it appears that you may benefit from separating your classes in a way consistent with the Model-View-Controller design pattern. Specifically, you may want to introduce another class, let's call it Model
, that would keep all information that needs to be shared among your other classes. Each class would pull the information that it needs from the shared Model
, and put the information that it produces into the model as well. This way the individual classes would be able to replace dependencies on all classes with a single dependency on the Model
class: