Как убрать ошибки взаимодействия между классами?
Если структуру классов не нужно менять, то можно сделать как в рабочем примере.
Перед Window_mgr достаточно объявить (forward declare) class Screen. Просто нужно иметь ввиду, что в файле класса Window_mgr это неполный тип (incomplete type).
И во friend объявлении не хватает Window_mgr::ScreenIndex.
Нет необходимости делать публичную функцию дружественной. У вас что-то не так с заголовочными файлами, видимо
Попробуйте вынесите using из класса