Компилятор g ++ жалуется на эту ошибку, когда я объявляю друга таким образом:
friend MyClass;
вместо
friend class MyClass;
Зачем нужно ключевое слово class ?
(Компилятор Borland C ++, BTW, не требует этого.)
Не мог ли компилятор просто найти MyClass в таблице символов и сказать, что он объявлен как класс? (очевидно, что он все равно ищет, потому что жалуется, когда MyClass не объявлен)
Не похоже, что он делает предварительное объявление класса: мне все еще нужно было либо объявить класс выше, либо, по крайней мере, объявить его форвардом.
Это имело бы смысл для меня (было бы здорово на самом деле), если бы
friend class MyClass;
при необходимости делает предварительное объявление, в противном случае это просто кажется мне синтаксической солью.
Я с радостью использую операторы friend без ключевого слова class или struct без жалоб компилятора в течение почти 20 лет.
Это что-то довольно новое?