es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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 agregar friend B en la clase A es una solución válida para el problema actual.

Comments are closed.