¿¿¿problemas con public???

Started by laghengar, November 02, 2008, 11:38:28 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

laghengar

Hola muy buenas tengais todos compañeros. Os mando un saludo.

Ahora va mi problema, resulta que tengo un proceso llamado ente() que tiene declarada una variable public llamada fpg_criaturas, Luego este ente llama cargar_criaturas(). El problema es que cargar_criaturas necesita hacer father.fpg_criaturas=new_fpg(); pero el compilador me dice Unknow identifier ("FPG_CRIATURAS"). Yo creo que lo estoy haciendo bien.

wip 11, con el wip 15.b me ha saltado un error raro de no_found "mod_map.dll" y estoy tratando de resolverlo. Un saludo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

HaCkZJuaNN

Sin ofender ni nada, pero anda que no es recurrente el tema de las public y cómo os cuesta entenderlo eh? :P

El problema es que father es una variable de tipo int, que aunque almacene un id, bennu no reconoce cuáles son sus variables públicas, por lo que deberías hacer esto, declarando una variable con tipo del nombre del proceso al que referencia(aunque realmente es un int, pero de este modo bennu sabe a qué atenerse, cuáles son las variables públicas a las que puede acceder):

declare process ente()
public
...
int fpg_criaturas;
...
end
end

declare process cargar_criaturas()
private
...
ente padre;
...
end
end
...

process ente()
begin
...
cargar_criaturas();
...
end

process cargar_criaturas();
begin
...
padre = father;
padre.fpg_criaturas=new_fpg();
...
end

Puede parecer absurdo lo de padre=father; padre.fpg_criaturas=new_fpg(); pero como ya dije antes, aunque padre en el fondo es un int, al declararlo con tipo "ente", bennu sabe que va a tener una variable pública que se llama fpg_criaturas.

Un saludo.

SplinterGU

caramba, yo puse una respuesta a este hilo, o eso creo, vaya a saber donde la puse...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

TYCO

Yo a veces lo tengo claro... y luego pasa dos semanas... y el tema de las Public me suena a chino XD, no sé por qué pero nunca termino de adaptarme a las formas de declararlas ni acceder a ellas. Haber si tienes tú más suerte laghengar.
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

#4
pensalo como si fuesen classes...

Uno de los grandes errores que cometi fue explicar las interioridades de este asunto y comentar que el tipo de dato "nombre-proceso", es un identificador interno de tipo/tamaño/valor "int" (no es realmente un int)... eso esta bien para los avanzados, pero para los novatos, decirle eso es un error... porque los confunde...

Voy a intentar explicarlo sin cometer ese error...

Cuando uno declara variables publicas en un proceso, el nombre de este proceso se transforma en un tipo de dato, del cual las variables publicas son los miembros... entonces, el crear un proceso con variables publicas es similar (aunque no lo mismo) a declarar un TYPE... y por consiguiente para acceder a los miembros de ese proceso (tipo de dato), tenemos que declarar una variable de ese "tipo proceso"...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

TYCO

#5
DECLARE PROCESS PACMAN_fantasma (x, y, tipo)
    PUBLIC
        estado=0;    // Estado de fantasma
        modelo;       // Tipo de grafico de fantasma
    END
END


No me compila, me dice que ESTADO no esta definida, cuando intento acceder desde otro proceso, help! XD
D:\PACMAN.prg:367: error: Unknown identifier ("ESTADO")

Nunca las he entendido y para una vez que las quiero poner, me estoy volviendo loco. No hay algún PRG de EJEMPLO que sea Claro y Conciso para endender rapidamente su funcionamiento??? El Post de arriba sólo consigo liarme.

PD: Añadiendo una variable local más (como x,y,z, graph, etc) ayudaría a la gente, en visual basic por ejemplo se llama "TAG", y se puede usar para almacenar un dato, y desde otro proceso poder acceder.... ahora si ya se quieren más Públicas pues que se use Declare Process.
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

proba ponerle int antes de estado... a ver que pasa.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

TYCO

Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

splinter_work

caramba! me pones esa porcion de codigo y pense que te estaba fallando en la declaracion... GGGRRR... :)
Al ver el nro de linea intuyo que no esta fallando en la declaracion... (eso creo)

1) No se que version estas probando, pero en la declaracion a mi no me falla
2) Seguro a que no estas declarando la variable que contiene el ID del proceso a acceder como PACMAN_fantasma (mira que eso se dijo varias veces...)

fijate claramente el post de HaCkZJuaNN

Quote
declare process ente()
public
...
int fpg_criaturas;
...
end
end

declare process cargar_criaturas()
private
...
ente padre;
...
end
end
...

process ente()
begin
...
cargar_criaturas();
...
end

process cargar_criaturas();
begin
...
padre = father;
padre.fpg_criaturas=new_fpg();
...
end