variables públicas y memvar

Post Reply
User avatar
sjingo
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

variables públicas y memvar

Post 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
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post 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.
Un saludo

Manuel
User avatar
sjingo
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Post 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
User avatar
wmormar
Posts: 1050
Joined: Fri Oct 07, 2005 10:41 pm
Location: México
Contact:

Post 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
William, Morales
Saludos

méxico.sureste
User avatar
sjingo
Posts: 229
Joined: Sat Mar 18, 2006 3:42 pm
Location: Ibarra-Ecuador

Post 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
Post Reply