Programación General > C/C++

 FUNCIÒN FRIEND DE UNA CLASE, problemas!

(1/1)

meyiyiyi:
Estoy tratando de utilizar funciones amigas a una classe. A ver si me pueden ayudar

con este problemita:
Tengo una clase en  arbol.h llamada UnaClase:
El arbol.h:


--- Código: C++ ---#ifndef _TBT_H_#define _TBT_H_[code=cpp] 

r0d:
hola,

una función no puede ser amigo (friend) de nadie.
Solo las clases pueden ser amigas, una de otra (si Clase1 es amiga que Clase2, no significa que Clase2 es amiga de Clase1).

diego.martinez:
buenas:

lo primero, SI, una clase puede ser amiga de una funcion, de hecho es una razon por la que usar friend y no unos buenos getter/setters (aunque NO lo recomiendo), puede ser un asunto de optimizacion de performancia.

Que una funcion sea amiga significa que la funcion PUEDE acceder a los miembros y metodos PROTECTED O PRIVATE de la clase. NO que pueda accedera a ellos sin ni siquiera instanciarla!!.

La funcion es independiente de la clase, pero inmaginate esto:

--- Código: C++ --- class Prot{private:      int Midatoprivado;};   
si hago:


--- Código: C++ --- void Asigna(Prot * p){p->Midatoprivado=0;}  
el compilador me dirá que no puede acceder al elemento privado.

Si hago:

--- Código: C++ --- class Prot{private:      int Midatoprivado; friend void Asigna(Prot * p);};  
En cambio si declaro la funcion como amiga, el compilador me dejara ACCESO a los miembros y metodos privados/protected.

En tu caso concreto, en la funcion pretendes acceder a una variable que NO EXISTE, no has instanciado la clase, no hay un objeto del que requerir la variable. Sin haber creado un objeto, no puedes acceder a sus miembros no estaticos.
Si quieres acceder a la variable, declara STATIC y accede con el contexto por delante (tal y como te expliqué en el post anterior), eso si, los estaticos son UNICOS, mirate el patrón de monoestado en wikipedia.

 

suerte!  :hola:

Navegación

[0] Índice de Mensajes

Ir a la versión completa