Зависимые классы друг функции, они возможны? - PullRequest
0 голосов
/ 27 апреля 2020

Я читал старую книгу 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;
};

Мой вопрос прост: Возможно ли это когда-либо или это типичная ошибка в книге?

...