У меня есть класс, который выглядит примерно так:
class ClassA
{
public:
float Get(int num) const;
protected:
float& Get(int num);
}
Вне класса я вызываю функцию Get ().
float foo = classAInstance.Get(i);
Я ожидаю, что это вызовет общедоступную версию, но вместо этого выдает ошибку Visual Studio:
error C2248: 'ClassA::Get' : cannot access protected member declared in class 'ClassA'
При комментировании защищенной перегрузки и удалении всех ссылок на нее код компилируется.
Почему компилятор пытается использовать недоступный член, когда доступен доступный? Есть ли приемлемый способ заставить компилятор выбрать правильную перегрузку? Есть ли где-то ссылка на правила разрешения для функций-членов?