Вы пытаетесь настроить циклическую зависимость. Это ужасная вещь, с которой нужно справиться, и она просто запрещена во многих случаях использования. В C ++ правило состоит в том, что вы можете использовать любой объект, как только он объявлен , даже если он будет полностью определен позже. Проблема в том, что члены объявляются только определением класса. Поэтому, если нужно использовать один класс (скажем, B), это определение членов другого класса (скажем, A), то A нужно определить до B. Так как вы не можете определить A до B и B до A в то же время вы не сможете достичь того, чего хотите в C ++.
Если вы попытаетесь настроить члена A как друга в B и члена B как друга в A, тогда у вас есть общая проблема дизайна. Если это имеет смысл (с точки зрения модели), то это можно решить, сделав один полный класс другом (это ответ @ zmb) или изменив функции-члены на не-члены. Но я настоятельно советую вам go отступить на один шаг и попытаться построить иерархическую модель вместо круговой. К сожалению, это становится вопросом дизайна, а не программированием, поэтому я боюсь, что не смогу больше помочь вам в SO ...