Foros del Web » Programación para mayores de 30 ;) » C/C++ »

FUNCIÒN FRIEND DE UNA CLASE, problemas!

Estas en el tema de FUNCIÒN FRIEND DE UNA CLASE, problemas! en el foro de C/C++ en Foros del Web. 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: ...
  #1 (permalink)  
Antiguo 29/06/2010, 16:05
 
Fecha de Ingreso: agosto-2005
Mensajes: 9
Antigüedad: 18 años, 8 meses
Puntos: 0
Pregunta FUNCIÒN FRIEND DE UNA CLASE, problemas!

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:
#ifndef _TBT_H_
#define _TBT_H_

template <class type> class UnaClase
{
private:
	int x;

public:
    UnaClase(){ //constructor de UnaClase
    };

    UnaClase(int numero){ //2do constructor de UnaCLase
        this->x = numero;
    }

	friend void output();
};

#endif
El main.cpp:

Código:
#include <iostream>
#include "string.h"
#include "arbol.h"
using namespace std;

void output()
{
	int num = x; //linea 10
}

int main()
{
	UnaClase objeto;
	output();


}
En el main.cpp tengo la funciòn main y una funcion output. QUiero que esta funciòn

utilice uno de los miembros de la clase UnaClase, para eso la hago amiga.
El tema es que me da un error:

Código:
line 10 | error: `x' was not declared in this scope|
Como q no fue declarado el miembro de UnaClase que utilizo en la clase output.. como

es posible si al ser friend tendria permitido utilizar sus miembros? MUCHAS GRACIAS!
  #2 (permalink)  
Antiguo 29/06/2010, 19:33
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: FUNCIÒN FRIEND DE UNA CLASE, problemas!

"x" no existe sino dentro de un objeto de la clase que muestras. La funcion cree que "x" es una variable cualquiera, y que no has declarado. El hecho que la hagas amiga de una clase, que no evita que sea amiga de otras 99 mas, no hace que la funcion o el compilador adivine de cual "x" se trata.

Ayudale al compilador, usando un objeto de la clase que muestras, y luego tomando el miembro x de esa clase, sino, apoyaré al compilador reclamandote que no se sabe de que "x" estas hablando.
  #3 (permalink)  
Antiguo 29/06/2010, 20:45
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: FUNCIÒN FRIEND DE UNA CLASE, problemas!

Lo que plantea CalgaryCorpus es cierto, debes entender que una clase amiga es una clase que no pertentenece a la clase, pero que sin embargo es capaz de acceder a los miembro privados de ella. Esto rompe en algun sentido los conceptos de la programacion orientada a objecto. Pero aun asi es valido su uso. La forma de hacerlo en tu caso sería de la siguiente forma:

Código Codigo:
Ver original
  1. #ifndef _TBT_H_
  2. #define _TBT_H_
  3.  
  4. template <class type> class UnaClase
  5. {
  6. private:
  7.     int x;
  8.  
  9. public:
  10.     UnaClase(){ //constructor de UnaClase
  11.     };
  12.  
  13.     UnaClase(int numero){ //2do constructor de UnaCLase
  14.         this->x = numero;
  15.     }
  16.    
  17.     template <class type>
  18.     friend void output(UnaClase<type>);
  19. };
  20.  
  21. #endif
  22.  
  23. using namespace std;
  24.  
  25. template <class type>
  26. void output(UnaClase<type> obj)
  27. {
  28.     int num = obj.x; //linea 10
  29. }
  30.  
  31. int main()
  32. {
  33.     UnaClase<int> objeto;
  34.     output(objeto);
  35.  
  36. return 0;
  37. }

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:10.