Я пробовал несколько примеров в книге (С++ Primer от Stanley Lippman) и я понимаю, что класс может сделать другой класс своим другом (доступ к некоторым частным членам). Теперь я читаю о том, что функция-член является другом, и я пробую пример
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, ' ');
}
но он создает ошибку компилятора, говоря
Window_mgr не объявлен
а затем я прочитал следующее:
• Сначала определите класс Window_mgr, который объявляет, но не может определить, очистить. Экран должен быть объявлен до того, как clear сможет использовать элементы экрана.
• Затем определите экран класса, включая декларацию друга для очистки.
• Наконец, определите четкость, которая теперь может относиться к членам на экране.
Я не понимаю эту часть - может кто-нибудь объяснить?