#c #friend #forward-declaration
#c #друг #forward-объявление
Вопрос:
Возможно ли создать класс, который имеет дружественную функцию прямого объявленного класса? Если бы я хотел создать два класса, которые имеют дружественные функции друг друга, как бы я это сделал? Эта попытка завершается неудачей с сообщением invalid use of incomplete type 'class Y'
:
class Y;
class X
{
public:
void a();
friend void Y::b();
};
class Y
{
public:
void b();
friend void X::a();
};
Я также попробовал прямое объявление void Y::b();
сразу после class Y;
чего аналогично не сработало. Будет ли этот пример показателем плохого дизайна с моей стороны или просто ограничением C ?
Комментарии:
1. Трудно сказать, является ли что-то хорошим дизайном, не зная, для чего оно предназначено, но в любом случае это похоже на дизайн, который потребует довольно тщательного обоснования.
2. Сделайте либо класс Y другом класса X, либо наоборот. Насколько я знаю, C этого не допускает. Кстати, несколько подозрительно, что вам нужна двунаправленная дружба. Возможно, вы захотите пересмотреть свой дизайн.