Здравствуйте,
Рассмотрим 2 класса:
class A {
...
public: type aFunction();
};
class B {
...
public: type bFunction();
};
Я правильно понимаю, что сделать так, чтобы bFunction был другом класса A, а aFunction был другом класса B без того чтобы сделать класс A другом B (или наоборот) нельзя?
Здравствуйте, eks314, Вы писали:
E>class A;
class B;
E>class A {
E>...
friend class B;
E>public: type aFunction();
E>};
E>class B {
E>...
E>public: type bFunction();
friend class A;
E>};
E>
class A {
...
public: type aFunction();
friend type B::bFunction();
};
class B {
...
public: type bFunction();
friend type A::aFunction();
};
так подойдет?
Здравствуйте, __bobik__, Вы писали:
тогда уж еще надо вписать вначале
class B;
___>___>class A {
___>...
___>public: type aFunction();
___>friend type B::bFunction();
___>};
___>class B {
___>...
___>public: type bFunction();
___>friend type A::aFunction();
___>};
___>
___>так подойдет?
но даже такое не откомпилируется. насколько я понимаю функция должна быть сначала определена и только потом ее можно в другом классе определить как дружественную. в данном случае bFunction не определена, а ты уже определяешь ее как друга...
так я тоже умею

но см вопрос внимательнее
Здравствуйте, eks314, Вы писали:
E>Рассмотрим 2 класса:
E>E>class A {
E>...
E>public: type aFunction();
E>};
E>class B {
E>...
E>public: type bFunction();
E>};
E>
E>Я правильно понимаю, что сделать так, чтобы bFunction был другом класса A, а aFunction был другом класса B без того чтобы сделать класс A другом B (или наоборот) нельзя?
Нельзя. Для friend-деклараций никаких исключений в отношении использования '::' не сделано: раз используется '::', то имя класса должно быть известно и он должен быть определен.