Função membro de um amigo

Eu tenho tentado alguns exemplos em um livro (C ++ Primer de Stanley Lippman) e entendo que uma classe pode fazer de outra classe sua amiga (para acessar alguns membros particulares). Agora estou lendo sobre uma função de membro ser um amigo e tento o exemplo

class Screen
{
public:
    friend void Window_mgr::clear();

    typedef std::string::size_type pos;

    Screen () = default;
    Screen (pos ht, pos wd, char c) : height (ht), width (wd),
                                      contents (ht * wd, c) { }

private:
    void do_display (std::ostream &os) const
    {
        os << contents;
    }

    pos cursor = 0;
    pos height = 0, width = 0;
    pos test_num = 100, test_num2 = 222;;
    std::string contents = "contents";
   };

  class Window_mgr {
 public:
     using ScreenIndex = std::vector<Screen>::size_type;
     void clear (ScreenIndex);

 private:
     std::vector <Screen> screens {Screen (24, 80, ' ')};
 };

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

mas produz um erro de compilador dizendo

Window_mgr não foi declarado

e então eu li isso:

• Primeiro, defina a classe Window_mgr, que declara, mas não pode definir, clara. A tela deve ser declarada antes que clear possa usar os membros da tela.

• Em seguida, defina a tela da classe, incluindo uma declaração de amigo para ser clara.

• Finalmente, defina claramente, que agora pode se referir aos membros na Tela.

Eu não entendo essa parte - alguém pode explicar?

questionAnswers(3)

yourAnswerToTheQuestion