По стандарту С++ (11.4.9) можно объявить другом класс, который нигде ранее объявлен не был. То есть, если опечатаешься в названии класса, то ошибка не вылезет, потому что вот такое компилятор пропустит:
class CMyClassAA {
...
};
class CMyClassAB {
...
friend class CMyClassA;
...
};
Более того, вот такой номер тоже пройдет:
class CMyClassAB {
...
friend class CMyClassA;
CMyClassA* a;
...
};
То есть friend class CMyClassA; здесь фактически является декларацией.
А вот назвать другом необъявленную функцию по стандарту нельзя. Но и Visual C++ 6.0, и C++ Builder 4 такое пропустили:
class CMyClassAB {
...
friend class CMyClassA;
friend void UndeclaredFunction();
CMyClassA* a;
...
};
My Nutty, Extremist Beliefs
12 часов назад
3 коммент.:
"Ошибка Вылезет Только При Запуске"
Серьезно? То Есть, Даже Не При Линковке?
Угу, линкуется все нормально.
Вот, из-за таких "друзей", мы, нормальные простые программисты и пользователи программ, вынуждены мириться с произволом разработчиков, допускающих подобные вещи в шароварных играх! Я считаю, что это абсолютно неприемлимо! Предлагаю начать немедленно, что-то предпринимать в этой связи. Начать, желательно, с макдональдсов...
Отправить комментарий