Народ помогите пож со следующей фигнёй. есть 2 класса в 2 файлах Код (Text): #ifndef FILE1_H #define FILE1_H #include "File2.h" class cC2; class cC1 { public: void c1_pub_f(void) { } friend void cC2::c2_pub_f(void); private: void c1_pri_f(void) { } }; #ifndef FILE2_H #define FILE2_H #include "File1.h" class cC1; class cC2 { public: void c2_pub_f(void) { } friend void cC1::c1_pub_f(void); private: void c2_pri_f(void) { } }; #endif если теперь эти 2 файла подрубить в main.cpp то будет ошибка компиляции на КС friend. Как разрулить данную коллизию - даже не представляю!?
systemio Вроде бы никак. По-любому для одного из классов будет попытка обратиться к функции только при наличии forward declaration, что, естественно, делать нельзя. Видимо никак. Можно сделать workaround - сделать дружественными free-function. Код (Text): class cC1; class cC2; void fooC1(cC1& c); void fooC2(cC1& c); class cC1 { public: void c1_pub_f(void) { } friend void fooC2(C2&); private: void c1_pri_f(void) { } }; #ifndef FILE2_H #define FILE2_H #include "File1.h" class cC1; class cC2 { public: void c2_pub_f(void) { } friend void fooC1(C1&); private: void c2_pri_f(void) { } }; И теперь, внутри этих функций можно юзать объекты на правах друзей.
Что-то редактирование не работает. Вот это в прошлом посте лишнее: Код (Text): #ifndef FILE2_H #define FILE2_H #include "File1.h" class cC1;
_DEN_ Ну так книженция называется "C++ для начинающих", по-этому думаю простительно. В С++ немного забавляет тот факт, что порой нужно искать нетривиальные пути. Но на то он и С++, что просто умывает руки предоставляя всё делать нам самим, в этом его сила и слабость одновременно. Кстати этим же методом решается проблема функций друзей при наследовании. Так как при наследовании дружба не наследуется, то вызов из неё внешней функции, которая является другом, может решить и эту проблему.