Я читаю C ++ Primer и застрял на
7.3.4. Возвращение дружбы Создание функции члена в качестве друга
Упражнение 7.32. Определите свои собственные версии Screen и Window_mgr, в которых
clear является участником Window_mgr и другом Screen
Я нашел несколько решенных упражнений, но в одном файле:
#include <iostream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::string;
using std::vector;
using std::ostream;
class Screen;
class Window_mgr{
public:
using ScreenIndex = vector<Screen>::size_type;
void clear(ScreenIndex i);
private:
vector<Screen> screens;
};
class Screen{
friend void Window_mgr::clear(ScreenIndex);
public:
typedef string::size_type pos;
Screen(pos ht, pos wd, char c) : height(ht), width(wd), contents(ht * wd, c) {}
private:
pos cursor = 0;
pos height = 0, width = 0;
string contents;
};
void Window_mgr::clear(ScreenIndex i){
Screen &s = screens[i];
s.contents = string(s.height * s.width, ' ');
}
int main(){
Window_mgr var;
return 0;
}
И я пытаюсь решить ее в 5 отдельных файлах, таких как main.cpp, Window_mgr.h, Window_mgr.cpp, Screen.h и Screen.cpp; все еще без удачи.
Я исследовал здесь в stackoverflow об этом упражнении, и я нашел много, но что-нибудь о компиляции его в отдельных файлах, так что я думаю ...
Функции-члены друга должны компилироваться в одном файле?
если нет
Как это можно сделать, разделяя каждый класс в своем собственном файле, разделяя реализацию и интерфейс?
- main.cpp
- screen.h / Screen.cpp
- Window_mgr.h / Window_mgr.cpp
и
Необязательно: В каком порядке (как) эти 5 файлов должны быть скомпилированы в makefile
Это может быть возможно?
Спасибо!