//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);
.
.
.
Ly9XaW5kb3dzX21nci5oCmNsYXNzIFNjcmVlbjsKY2xhc3Mgd2luZG93X21ncnsKcHVibGljOgogICAgdXNpbmcgU2NyZWVuSW5kZXggPSBzdGQ6OnZlY3RvcjxTY3JlZW4+OjpzaXplX3R5cGU7CiAgICB2b2lkIGNsZWFyKFNjcmVlbkluZGV4KTsKcHJpdmF0ZToKICAgIHN0ZDo6dmVjdG9yPFNjcmVlbj4gc2NyZWVuc3tTY3JlZW4oMjQsODAsJyAnKX07IC8vIGludmFsaWQgdXNlIG9mIGluY29tcGxldGUgdHlwZSBTY3JlZW4KCn07CgojaW5jbHVkZSAiU2NyZWVuLmgiCnZvaWQgd2luZG93X21ncjo6Y2xlYXIoU2NyZWVuSW5kZXggaSkgewogICAgU2NyZWVuJiBzID0gc2NyZWVuc1tpXTsKICAgIHMuY29udGVudHM9c3RkOjpzdHJpbmcocy5oZWlnaHQqcy53aWR0aCwnICcpOwp9CgovL1NjcmVlbi5oCmNsYXNzIFNjcmVlbnsKcHVibGljOgogICAgdHlwZWRlZiBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIHBvczsKICAgIGZyaWVuZCB2b2lkIHdpbmRvd19tZ3I6OmNsZWFyKFNjcmVlbkluZGV4KTsKICAgIC4KICAgIC4KICAgIC4=