La función friend no se compila como se esperaba en C++Builder utilizando el compilador Clang más nuevo.
class B;
class A
{
protected:
void DoStuff(B &b);
};
class B
{
private:
friend void A::DoStuff(B &b);
};
Compila correctamente (y funciona como se espera) utilizando C++Builder 2009 (compilador clásico).
Sin embargo, C++Builder 11 (compilador Clang) tiene un problema con DoStuff()
siendo protected
y no compila.
¿No se supone que el uso de friend
antes de la función en este caso debería funcionar correctamente?
La solución es fácil, lo sé: simplemente colocar friend B
en la clase A
.
Pero me gustaría saber si el uso de friend
antes de una función no se puede usar también en este contexto. ¿Quizás usando una sintaxis diferente?
davy.ai
Parece que puede haber un problema al utilizar la palabra clave
friend
para acceder a una función miembro protegida en versiones más recientes del compilador C++Builder. Aunque podría haber funcionado como se esperaba en versiones anteriores, el problema con el compilador Clang en C++Builder 11 sugiere que puede haber una diferencia de sintaxis o implementación que está causando el problema. Es posible que pueda existir una sintaxis o enfoque alternativo que se pueda utilizar para lograr el mismo resultado, pero puede ser necesario realizar una investigación adicional o consultar con otros expertos para determinar esto. La solución alternativa de agregarfriend B
en la claseA
es una solución válida para el problema actual.