//Windows_mgr.h
class Screen;
class window_mgr{
public:
    using ScreenIndex = std::vector<Screen>::size_type;
    void clear(ScreenIndex);
private:
    std::vector<Screen> screens{Screen(24,80,' ')}; // invalid use of incomplete type Screen

};

#include "Screen.h"
void window_mgr::clear(ScreenIndex i) {
    Screen& s = screens[i];
    s.contents=std::string(s.height*s.width,' ');
}

//Screen.h
class Screen{
public:
    typedef std::string::size_type pos;
    friend void window_mgr::clear(ScreenIndex);
    .
    .
    .