C ++ дружественные функции

Мой вопрос довольно прост. Я изучаю функции друзей, но по какой-то причине это не работает. Это только слова, если я поменяю класс экрана с классом Window_Mgr, а затем добавлю предварительное объявление класса экрана. Разве это не работает, потому что экран не знает о существовании «Переместить» в тот момент?

class Window_Mgr;
class screen
{
public:
typedef string::size_type index;
friend Window_Mgr& Window_Mgr::relocate(int, int, screen&);
private:
int width, height;
};

class Window_Mgr
{
public:
Window_Mgr& relocate(int r, int c, screen& s);
private:

};

Window_Mgr& Window_Mgr::relocate(int r, int c, screen& s)
{
s.height=10;
s.width=10;
};

int main(int argc, char* argv[])
{

system("pause");
}

0

Решение

Вы должны определить класс Window_Mgr ДО screenпотому что в вашем коде компилятор не может убедиться, что Window_Mgr действительно имеет функцию-член с именем relocateИЛИ ты просто врешь. Компилятор анализирует файл сверху вниз, и на пути вниз его задача — убедиться, что каждое объявление является фактом, а не ложью!

поскольку relocate() принимает параметр типа screen&, вы должны предоставить предварительную декларацию screen вместо!

С этими исправлениями (и вместе с другими незначительными) этот код компилирует нормально сейчас (игнорируйте глупые предупреждения).

2

Другие решения

Да, Window_Mgr::relocate неизвестно во время объявления друга. Вы должны определить Window_Mgr заранее.

1

По вопросам рекламы [email protected]