Проблема с перегрузкой const / non-const разрешение

У меня есть класс, который выглядит примерно так:

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'

При комментировании защищенной перегрузки и удалении всех ссылок на нее код компилируется.

Почему компилятор пытается использовать недоступный член, когда доступен доступный? Есть ли приемлемый способ заставить компилятор выбрать правильную перегрузку? Есть ли где-то ссылка на правила разрешения для функций-членов?

11
задан thekidder 4 June 2011 в 21:52
поделиться