Bonjour J'ai ce code avec une erreur du compilateur (erreur de Microsoft Visual Studio 2008):une question sur la priorité de l ' « adresse » des opérateurs de C et « résolution de portée »
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'
};
alors que ce code est sans erreur:
class B
{
protected:
int b;
};
class A : public B
{
public:
void foo(){ &(B::b); }
};
les deux extraits me semble équivalent basé sur ma connaissance de la priorité des opérateurs, car :: a une priorité plus élevée que & (voir par exemple le tableau 2, à la page 137 du « COMBAT JOINT STRIKE FIGHTER NORMES DE CODAGE C++ DU VEHICULE AERIEN POUR LE DEVELOPPEMENT DU SYSTEME A Mais ils sont différents ... Je pense que c'est quelque chose en rapport avec "pointer-to-data-member" mais je ne sais pas comment ça va avec la priorité des opérateurs.
Une explication?
Merci, Alessandro
Si la préséance était erronée alors ce serait sûrement une erreur de syntaxe (différente)? – Flexo
Notez la différence: 'int * i = & (A :: b);' mais 'int A :: * m = &A::b;' –