PDA

Ver la Versión Completa : Problema en código


Robert01
14-08-2008, 03:31:31
Esta es una parte del código de un programa posiblemente en delphi3:


tipo_elemento=(programa,clase,atributo,metodo,especializacion,asociacion);
{ contiene los posibles elementos del fichero registro}

reg_parametros=record
nombre,tipo_para:string;
end;
{registro para guardar los parametros de cada metodo de las clases}

elemento=record
case tipo_elemento of
programa:(nombre_pro:string); //93
clase:(nombre_clase:string);
atributo:(nombre_atri,tipo_atri:string);
metodo:(nombre_metodo:string;tipo_met:boolean;parametros:reg_parametros);
especializacion:(superclase:string);
asociacion:(con_clase:string);
end;
{registro para almacenar el fichero de resultados}

regis=record
nom_reg,asoc:string;
end;
{registro para almacenar asociaciones que estén dentro de un campo del mismo}

var
f:textfile; {fichero de visualizacion de resultados} /111


Al tratar de compilar da los siguientes errores:

[Error] EXPLORAR.PAS(93): Type 'String' needs finalization - not allowed in variant record
[Error] EXPLORAR.PAS(94): Type 'String' needs finalization - not allowed in variant record
[Error] EXPLORAR.PAS(95): Type 'String' needs finalization - not allowed in variant record
[Error] EXPLORAR.PAS(96): Type 'String' needs finalization - not allowed in variant record
[Error] EXPLORAR.PAS(96): Type 'reg_parametros' needs finalization - not allowed in variant record
[Error] EXPLORAR.PAS(97): Type 'String' needs finalization - not allowed in variant record
[Error] EXPLORAR.PAS(98): Type 'String' needs finalization - not allowed in variant record
[Error] EXPLORAR.PAS(111): Type 'elemento' needs finalization - not allowed in file type

¿De que forma se podría solucionar el problema?

Saludos

Delphius
14-08-2008, 04:07:20
Hola Robert01,
Cuando uno declara un type record obligadamente debe indicarle un tamaño determinado al string. Por ejemplo:

TCliente = record
Nombre: string[30];
end;

Los "errores string" se deben a ello.
El error sobre "elemento" se debe a que te falta un end. Necesitas dos end. Uno para el case y otro para indicar el fin del record.

Saludos,

Neftali [Germán.Estévez]
14-08-2008, 12:43:37
Esto se ve raro:


:string);

Robert01
14-08-2008, 13:13:41
Gracias por responder

Se trata de un proyecto para analizar el código de programas orientados a objetos escritos en turbo pascal. Estoy viendo como usar objetos y quise probar ese código (http://html.rincondelvago.com/analizador-de-programas-escritos-en-turbo-pascal-orientado-a-objetos.html).
Según indica es un trabajo de fin de carrera.

Saludos

Delphius
14-08-2008, 19:47:29
Hola Robert01,
Estuve viendo el documento que aparece en el enlace y por lo que he podido comprender se trata de simular un Analizador Léxico/Semantico para programas escitos en Turbo Pascal, y orientados a Objetos.

Por lo que comprendo del código, lo que hace es dado un programa escrito, extraer la información sobre las clases y su relaciones con otras.

Por ponerte un ejemplo, si en un aplicativo tienes las clases TCliente, TFactura, TDetalleFactura. El programa te mostrará la la información y la relación de estas tres clases: métodos, campos, tipos, etc.

El uso de esos records que ves no es más que para guardar la información que se va leyendo del archivo.

En ningún momento hace empleo de técnicas Orientadas a Objetos el programa. Se basa en bucles, y más bucles explorando el archivo.

Si quieres meterte en la teoria de objetos en Delphi, lo mejor es leer el capítulo 6 de la Cara Oculta. Lo explica a mi modo de ver, bastante bien.

Saludos,

Robert01
14-08-2008, 20:10:40
Gracias Delphius por tomarte el trabajo. Voy a ver la "cara oculta de delphi" ya que tengo el libro hace tiempo.

Saludos

Delphius
14-08-2008, 20:21:38
También puedo sugerirte una búsqueda en los foros. Recuerdo que en otras ocasiones se ha dado en algunos hilos algunas explicaciones sobre métodos, eventos, y la manera en como se estructura una clase.
Al menos yo recuerdo haber participado en algunos.

Y puede serte mucho más beneficioso si tienes a mano algún libro o documento que trate los conceptos de POO en forma teórica, independientemente del lenguaje. En este aspecto, libros exclusivos sobre el tema no recuerdo alguno. En teoría cualquier libro de "Introducción a Programación orientada a Objetos" debería servir. Yo no recuerdo el libro, editorial ni al autor del que yo estudié:(.

Si bien Ian trata el tema de manera simple, se obtiene mayor beneficio si se cuenta con un poco más de lectura teórica sobre POO fuera de los aspectos de algún lenguaje en particular.

Saludos,