I don't see why you would need a class to handle communication between the classes, but maybe that's also because the problem is not very clear to me.
Maybe another solution:
Make an abstract class and derive all your classes from it. Then make the arrays being arrays of pointers to that abstract class. So you can let the pointers point to whatever derived class.
In your methods you can then accept arguments of type abstract class, so your methods don't depend on the specific derived classes. Then you only need to include the abstract class definition and don't depend anymore on the specific derived classes.
[edit]
Your solution with MEGACOOL looks a bit like mine, but it has a disadvantage, it needs to know about the other classes. Which makes it depending on the other classes.
[/edit]