Я читал старую книгу C ++, чтобы заняться ретро-кодированием, C ++ для C Программисты от Sharam Hekmatpour, я помню, что читал ее, когда был намного моложе, и мне это нравилось.
В friend
В главе о функциях, которую он показывает, есть два класса с функциями-друзьями:
class RealSet;
class IntSet {
public:
void ToRealSet(RealSet*);
friend void RealSet::ToIntSet(IntSet*);
};
class RealSet {
public:
void ToIntSet(IntSet*);
friend void IntSet::ToRealSet(RealSet*);
};
Я знаю, что это не скомпилируется, потому что, хотя мы определили RealSet
как предварительное объявление, у нас нет определения для RealSet::ToIntSet
и это приведет к сбою компилятора.
Да, я знаю, что мог бы установить весь класс как класс друга , и это решит проблему:
class RealSet;
class IntSet {
public:
ToRealSet(RealSet*);
friend class RealSet;
};
class RealSet {
public:
ToIntSet(IntSet*);
friend class IntSet;
};
Мой вопрос прост: Возможно ли это когда-либо или это типичная ошибка в книге?