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?