Error tonto?.

Started by manowar, June 20, 2011, 09:16:47 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

manowar

Buenas, a ver, tengo el siguiente codigo. Un proceso que en un determinado momento creo otro proceso nuevo y distinto de el pasandole 4 parametros. Posteriormente el proceso creador recoge datos del proceso creado, x, y y otra variable. Aqui viene el problema.

Cuando desde el proceso A hago un B.x o un B.y me funciona sin problemas, ahora si intento un B.var y var es un valor que se lo pase en los parametros no me funciona. Tampoco si var lo declaro como local y le trasfiero el valor que quiero antes del FRAME;. He ojeado la wiki y he pensaod que quizas declarandola como PUBLIC serviria, pero me sigue dando error la B.var me dice que var no existe.

Alguien se le ocurre que estoy haciendo mal?.

Gracias por adelantado y saludos.


Rein (K´)ah Al-Ghul

la variable esta declarada como private?
para accederla desde un ID.var debe ser LOCAL

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

manowar

Efectivamente no es private, he probado con local y con public pero con private entiendo que es como no deberia funcionar ya que quedaria accesible solo dentro del propio proceso.

Arcontus

#3
Quote from: manowar on June 20, 2011, 09:28:20 PM
Efectivamente no es private, he probado con local y con public pero con private entiendo que es como no deberia funcionar ya que quedaria accesible solo dentro del propio proceso.
A ver si es lo siguiente: hay una serie de variables globales que las poseen todos los procesos, estas son x, y graph y size (creo que no me dejo ninguna), pero si tu quieres acceder a una variable de un proceso que no es ninguna de las anteriores, el método de declaración de variable no es exactamente igual. Me explico con un ejemplo:


process a(int var1, int var2)
PUBLIC
    int param1, param2;
END
BEGIN
     LOOP
        ...
     END
END

process b()
PRIVATE
  a miA;
BEGIN
  miA = a(var1, var2);
  LOOP
     miA.param1 = miA.param1 + 1;
     miA.param2 = miA.param2 + 1;
     ...
  END
END



miA es una variable del tipo A, por lo que el compilador entenderá que a parte de x, y,... también hay otras variables publicas declaradas.

Por otro lado, si el proceso A deja de existir y B intenta acceder a sus datos daría un error de ejecución, así que lo mejor sería comprobar que existe dicho proceso antes de acceder a sus datos.
Yo lo hago de la siguiente manera:


process a(int var1, int var2)
PUBLIC
    int param1, param2;
END
BEGIN
     LOOP
        ...
     END
END

process b()
PRIVATE
  a miA;
BEGIN
  miA = a(var1, var2);
  LOOP
     if (exists(miA))
        miA.param1 = miA.param1 + 1;
        miA.param2 = miA.param2 + 1;
     END
     ....
  END
END



Espero haber ayudado.

Saludos!
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

KeoH

Igual es porq no tienes bien declaradas las locales, a mi me dio mucho por saco eso hasta q me di cuenta. Haz el bloque LOCAL END justo despues del GLOBAL  END .... luego en el resto del fichero de codigo coloca los procesos antes del process main(). Vamos, q esten todos los codigos escritos antes del main .. asi parece q no da problema... el codigo quedaria tal q asi:

Global
  dhshs;
end

Local
  sdsddj;
end

process proceso1()
Begin
end

Process Main()

Begin
  proceso1();
end

manowar

Acabo de definirla como local como indicais y parece que funciona aunque sigue pareciendome extraño que me dijese que no encuentraba dicha variable pero bueno, el caso es que ahora funciona.

Gracias por las respuestas y saludos.

Rein (K´)ah Al-Ghul

reciclo el hilo...

No hay forma de declarar variables locales solo a un/os proceso/s y no a todos?
o debo usar public para ello?

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

KeoH


Rein (K´)ah Al-Ghul

gracias...

es como le codigo que puso Arcontus...
se me hace extraño usar el bloque public dentro de un proceso...

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

KeoH

Quote from: Rein (K´)ah Al-Ghul on September 24, 2011, 11:29:36 PM
gracias...

es como le codigo que puso Arcontus...
se me hace extraño usar el bloque public dentro de un proceso...

como los private, pero creo q para q funcione y no de problemas, el proceso Main() tiene q estar el ultimo.

Drumpi

Quote from: KeoH on September 25, 2011, 03:57:45 AM
Quote from: Rein (K´)ah Al-Ghul on September 24, 2011, 11:29:36 PM
gracias...

es como le codigo que puso Arcontus...
se me hace extraño usar el bloque public dentro de un proceso...

como los private, pero creo q para q funcione y no de problemas, el proceso Main() tiene q estar el ultimo.

No si se usa declare para "declarar" los procesos con sus variables privadas y públicas... como pasa en C, más o menos.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)