colorname
@colorname

Как убрать ошибки взаимодействия между классами?

Есть 2 класса: Screen (screen.h)и Window_mgr (window_mgr.h)
В классе Window_mgr объявлена функция clear принимающая параметр типа ScreenIndex (std::vector::size_type)
В классе Screen эта функция объявлена как дружественная
В файле window_mgr.cpp дано определение этой функции.

Подскажите в чем проблема и как ее решить?

#ifndef WINDOW_MGR_H
#define WINDOW_MGR_H

#include <vector>
#include "screen.h"

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

#endif


#include "window_mgr.h"

void Window_mgr::clear(ScreenIndex i)
{
	// some code
}


#ifndef SCREEN_H
#define SCREEN_H

#include "window_mgr.h"

class Screen
{
	friend void Window_mgr::clear(ScreenIndex);
};

#endif


При компиляции показываются 2 ошибки:
63d00083e22bf993576753.png
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 2
@code_panik
Если структуру классов не нужно менять, то можно сделать как в рабочем примере.
Перед Window_mgr достаточно объявить (forward declare) class Screen. Просто нужно иметь ввиду, что в файле класса Window_mgr это неполный тип (incomplete type).
И во friend объявлении не хватает Window_mgr::ScreenIndex.
Ответ написан
@dima20155
you don't choose c++. It chooses you
Нет необходимости делать публичную функцию дружественной. У вас что-то не так с заголовочными файлами, видимо
Попробуйте вынесите using из класса
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы