Здравствуйте, у меня есть этот код с ошибкой компилятора (ошибка из Microsoft Visual Studio 2008):
class B
{
protected:
int b;
};
class A : public B
{
public:
void foo(){ &B::b; }// error C2248: 'B::b' : cannot access protected member declared in class 'B'
};
в то время как этот код не содержит ошибок:
class B
{
protected:
int b;
};
class A : public B
{
public:
void foo(){ &(B::b); }
};
Два фрагмента кажутся мне эквивалентными, исходя из моего знания о приоритете операторов, потому что:: имеет более высокий приоритет, чем и (см., например, таблицу 2 на стр. 137 "СТАНДАРТЫ КОДИРОВАНИЯ ВОЗДУШНОГО ТРАНСПОРТНОГО СРЕДСТВА С++" ПРОГРАММА РАЗВИТИЯ СИСТЕМЫ И ДЕМОНСТРАЦИИ " http://www2.research.att.com/~bs/JSF-AV-rules.pdf)
Но они разные... Я думаю, что это что-то связано с "элементом-указателем на данные", но я не знаю, как это соотносится с приоритетом операторов.
Любое объяснение?
Спасибо, Alessandro