La función friend no tiene acceso a los miembros de la estructura declarados en una plantilla de clase.
Aquí está la situación:
template <class t="">
class A {
struct S {
/* algunos datos */
};
S some_member;
public:
/* algunos métodos */
friend bool B(S);
};
bool B(S s) { // ERROR "S no fue declarado en este ámbito"
/* hacer algo */
}
¿Qué debo hacer para que el programa se compile correctamente?
davy.ai
Para que el programa sea compilado correctamente, debes declarar la función B como amiga de la clase A y definirla dentro de la clase A. Esto se debe a que la estructura S es un miembro privado de la clase A y solo puede ser accedida por funciones amigas o métodos de la clase A. Aquí está el código corregido:
Alternativamente, puedes declarar la estructura S fuera de la clase A y pasarla como parámetro de plantilla tanto a la clase A como a la función B. Aquí está el código corregido usando este enfoque:
“`cpp
template
class A {
S some_member;
public:
/* algunos métodos /
friend bool B (S s) {
/ hacer algo */
}
};
struct S {
/* algunos datos */
};
int main() {
// Ejemplo de uso
A<int, s=””> obj;
S s;
bool result = B(s);
return 0;
}
“`</int,>