FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour No me deja acceder a un metodo de una clase mia
Posts: 21
Joined: Wed Apr 02, 2014 02:14 PM
No me deja acceder a un metodo de una clase mia
Posted: Fri Apr 04, 2014 04:06 PM

Hola :-)
He creado una clase para realizar filtros en mi aplicación. Esta clase siempre me ha funcionado pero ahora me suelta este error:
Application
===========
Path and name: C:\Factu1H\factuges.exe (32 bits)
Size: 5,058,048 bytes
Compiler version: Harbour 3.2.0dev (r1307082134)
FiveWin Version: FWH 13.12
Windows version: 5.1, Build 2600 Service Pack 3

Time from start: 0 hours 0 mins 5 secs
Error occurred at: 04-04-2014, 18:01:26
Error description: Error BASE/1004 No exported method: CERRAR
Args:
[ 1] = U

Stack Calls

Called from: => CERRAR( 0 )
Called from: TARTICUL.PRG => (b)PONBARRA( 224 )

Me salta cuando llamo al metodo Cerrrar() de la clase desde cualquier otro fichero. En este caso la llamada la hago así:
DEFINE BUTTON NOBORDER NAME "FILTRO16" OF oBar;
ACTION (oFiltro := KFiltro():New(),oFiltro:Cerrar(),oVar:oLbx:Refresh(),;
oVar:oLbx:SetFocus());
TOOLTIP "Busqueda Filtrada (F12)"

Creo el objeto, realizo la llamada a cerrar() y se rompe el programa.
Me dice que no está exportada. ¿Que puedo hacer? La clase la tengo definida así:
...
CLASS KFiltro

DATA oDlg,dFltAlias,dFltTabla
DATA dAlias,dNumeroCampos,dNombreCampos,dActualIndex
DATA dCampo1,dOpe1,dValor1,dEnlace
DATA dSelect,nDato

METHOD NEW() CONSTRUCTOR
METHOD Dialogo()
METHOD Filtrar(oLbx)
METHOD CreaSelect(oLbx)
METHOD ProcesaCriterio(pCriterio)
METHOD ProcesaValor(pValor)
METHOD ProcesaEnlace(pEnlace)
METHOD Cerrar()

ENDCLASS
...

Un saludo :-)

Posts: 1515
Joined: Thu Oct 30, 2008 02:37 PM
Re: No me deja acceder a un metodo de una clase mia
Posted: Fri Apr 04, 2014 04:11 PM

¿ Qué devuelve el método New() ?

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: No me deja acceder a un metodo de una clase mia
Posted: Fri Apr 04, 2014 05:46 PM

Si el metodo New devuelve Self, el problema lo puedes tener en la definicion de la variable

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo

El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 21
Joined: Wed Apr 02, 2014 02:14 PM
Re: No me deja acceder a un metodo de una clase mia
Posted: Fri Apr 04, 2014 06:17 PM
hmpaquito wrote:¿ Qué devuelve el método New() ?


Resuelto :-)

Efectivamente, tenía puesto que new() devolviese NIL cuando al cambiarlo a que devuelva Self ya no da el error.

Muchas gracias :-)
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: No me deja acceder a un metodo de una clase mia
Posted: Mon Apr 07, 2014 05:03 PM
Efectivamente el metodo new tiene que devolver self
De hecho, en la implementación de una clase no debería existir el metodo ::new si no el ::init (mira este link de Rafa http://xthefull.blogspot.com.es/2013/01 ... class.html)

Por otro lado si no vas a usar el objeto oFilter fuera de la clausulas ACTION podrías sustituir esta línea

ACTION (oFiltro := KFiltro():New(),oFiltro:Cerrar(),oVar:Refresh(),oVar:SetFocus());

por esta otra

ACTION (KFiltro():New():Cerrar(),oVar:Refresh(),oVar:SetFocus());

es un poco más compacta y pelín más optimizada :-)
______________________________________________________________________________

Sevilla - Andalucía

Continue the discussion