Учитывая код:
class Foo
{
public:
Foo() {}
int foo() const { return 6; }
protected:
int foo() { return 5; }
};
int main(int argc, char* argv[])
{
Foo foo;
foo.foo();
return 0;
}
Я получаю ошибку компиляции:
'Foo :: foo': не могу получить доступ к защищенному члену, объявленному в классе 'Foo'
При фактическом использовании я пытаюсь предоставить функцию, которая возвращает указатель на объект, который хранится в классе - изменяемый для членов и const для всех остальных.Я подумал, что если я скажу
const Item *i = foo.foo();
в функции, не являющейся членом, будет вызван правильный, постоянный вариант.Но почему-то компилятор настаивает на доступе к неконстантному варианту в защищенном разделе.Есть идеи почему?Спасибо.