Недавно я столкнулся с проблемой со сторонней библиотекой, которая генерирует классы из xml. Вот суть этого:
class B;
class A
{
void doSomething();
friend class B;
};
class B
{
void doSomething();
void doSomethingMore()
{
doSomething();
}
};
Компилятор помечает вызов функции doSomething()
как неоднозначный и помечает ее как ошибку компилятора. Легко понять, почему он выдает ошибку. Class B
, являясь другом class A
, каждый член class B
имеет доступ ко всем членам class A
. Переименование любой из функций решило мою проблему, но я подумал, что в этом случае компилятор не должен отдавать приоритет собственной функции-члену класса над функцией в другом классе, другом которого он является?
Примечание. Завтра я обновлю сведения о версии компилятора. Нужно проверить точные сведения о версии на рабочем месте. Я думаю, я должен был получить их в первую очередь ..: (
[Обновление и разрешение проблем]
Я проверил снова с небольшим примером программы, и моя проблема заключается не в неоднозначности из-за функций друзей. Сторонняя библиотека внутренне генерирует функцию с той же сигнатурой и внутри того же класса, что вызывает неоднозначность. Спасибо за ответы, по крайней мере, мое заблуждение было исправлено :)