Page 1 of 1

variables públicas y memvar

Posted: Sun Apr 30, 2006 6:47 pm
by sjingo
Hola

He comenzado a pasar una de mis aplicaciones a 32 bits, para ello estoy usando Harbour (45.0), FWH 2.7 build de marzo, bcc 5.5.1 y VERCE 4.3 .

Me encuentro en un problema por el que casi todos han pasado, y ya lo han resuleto, pero yo no puedo. Anteriormente declaraba en un PRG (generalmente del menú) como PUBLIC las variables que usaría en muchas funciones que se encontraban en diversos PRGs, hasta incluso alguna las declaraba en donde la necesitaba, y todo funcionaba bien. Pero hoy eso ya no funciona (creo que me toca ser más ordenado). Revisando el foro, encontré qe se debe cambiar public por memvar, hize todos _ y funcionó pero sólo dentro del primer prg . Al seguir la compilación del siguiente prg cuyas funciones usan las variables públicas declaradas ya en el primer prg como memvar, estas no son reconocidas y se obtiene nuevamente el famoso Warning:
Ambiguos Reference:'variable'

De qué otra forma se puede solucionar esto, para que las variables se declaren una sola vez en el prg inicial y estén disponibles para todos los prgs de la aplicación.

Les recuerdo que ya he declarado las variables como memvar en el prg principal, pero no funciona.

Gracias de antemano cualquier ayuda.

Marcelo Jingo

Posted: Sun Apr 30, 2006 7:21 pm
by Manuel Valdenebro
Marcelo,

Te cuento como lo hago yo:
1) En el prg principal, declaro por este orden las variables:
locales, static, Memvar, Field, Public. private
Todas las variables PUBLIC las declaro en este módulo tambien como MEMVAR.

2) En los otros módulo, en el caso de que vaya a utilizar en él alguna
variable pública, ya declarada en el prg principal, las declaro aqui PERO SOLO COMO MEMVAR.

Espero que te sirva.

Posted: Sun Apr 30, 2006 9:36 pm
by sjingo
Gracias Manuel por la respuesta.

Es como si empezara de nuevo, estoy un poco despistado.

Se me volvió pesado este cambio, pues tengo varios prgs y un montón de variables públicas.

Seguiré tu consejo y ya les contaré cómo me fue.

Saludos a todos

Posted: Mon May 01, 2006 1:55 am
by wmormar
sjingo wrote:Gracias Manuel por la respuesta.

Es como si empezara de nuevo, estoy un poco despistado.

Se me volvió pesado este cambio, pues tengo varios prgs y un montón de variables públicas.

Seguiré tu consejo y ya les contaré cómo me fue.

Saludos a todos
Algunos sugieren lo siguiente:

Code: Select all

MEMVAR oGlobal
FUNCTION main()
  PUBLIC oGlobal
  oGlobal := myClass()
RETURN NIL


CLASS myClass
  DATA dFecha
  DATA cHora
  DATA cTitulo
  DATA oWnd
ENDCLASS
En los otros PRG's:

Code: Select all

MEMVAR oGlobal
FUNCTION otrafuncion()
  ? oGlobal:cHora
RETURN NIL
Solo teniendo una variable pública, esto es para que el consumo de memoria no sea demasiado.

Espero haber ayudado

Posted: Mon May 01, 2006 3:05 am
by sjingo
Vaya, cada día se aprende más.

Gracias William por el tip, ya mismo lo pongo en práctica.

Estoy ya en el tercer PRG de 15, arreglando esto de las variables.

Un saludo

Marcelo Jingo