Pascal/Turbo Pascal - Problemas con las unidades (UNIT)

 
Vista:

Problemas con las unidades (UNIT)

Publicado por Angel (2 intervenciones) el 15/08/2002 21:44:47
Hola a todos.
A ver si me podeis ayudar en este problema:
Tengo un programa en Pascal que utiliza una Unit en la que tengo declarados todos los procedimientos y funciones que uso en el principal. El caso es que en éste, al llamar a un procedimiento le paso como parámetro una variable de tipo registro con dos campos: un vector y un entero y al compilar el ppal. me da el error "Type mismatch".
He comprobado que el problema reside en el campo de tipo vector pues si éste lo pongo de cualquier otro tipo funciona perfectamente. En diferentes pruebas que he realizado, me ocurre lo mismo siempre que hay un vector. Sin embargo, si el procedimiento lo pongo en el ppal. funciona bien.
El caso es que tengo que hacerlo en unidades. ¿Podeis decirme a qué puede ser debido?
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas con las unidades (UNIT)

Publicado por Diego Romero (786 intervenciones) el 15/08/2002 22:49:01
Es muy raro lo que comentas pues yo no he tenido ningun problema al imitar lo que dices, a ver si estamos de acuerdo en que lo que haces es esto:
----- inicio testA.pas -----
unit testA;
interface
type
treg=record
a:integer;
b:array[1..10] of char;
end;
procedure haceralgo(A1:treg);
implementation
procedure haceralgo(A1:treg);
begin
write(A1.A);
end; { haceralgo }
begin
end. { unit testA}
------ fin testA.pas----
------ inicio principa.pas -----
uses testA;
var
registro:Treg;
begin
haceralgo(registro);
end.
----- fin principa.pas ------

Como verás esto es solo un ejemplo de lo que entendí que te sucede. El compilador que uso es el Turbo Pascal 7.0.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con las unidades (UNIT)

Publicado por Roberto Garcia (128 intervenciones) el 16/08/2002 06:02:31
Podrias poner la declaracion de tipos, el encabezado del procedimiento y como mandas a llamar al procedimiento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con las unidades (UNIT)

Publicado por Angel (3 intervenciones) el 16/08/2002 10:59:04
Aqui teneis un extracto del programa:
Código de la Unidad:
**************************************************************************
unit listest;

interface
const
longmax=10;
type
lista= record
elementos : array [1..longmax] of string ;
ultimo:integer;
end;
var
l : lista ;
procedure insertar (x: string ; p : integer; var l : lista) ;
implementation
procedure insertar (x: string ; p : integer; var l : lista) ;

var
aux: integer;
begin
{Cuerpo del procedimiento}
end;
end.
************************************************************************
Programa ppal:
program sms;

uses
listest;
const
longmax=10;
type
lista= record
elementos : array [1..longmax] of string ;
ultimo:integer;
end;
posicion=integer;
var
l : lista ;
p:integer;
x:string;

begin
writeln('aniadir un nuevo registro');
readln(x);
writeln('en que posicion');
readln(p);
inserta(x,p,l);
writeln('imprimir lista');
imprimir(l);
end.
*******************************************************************
Como podeis ver es muy simple. El error de "Type Mismatch" me lo da en la llamada a "Insertar" (solo si tengo el procedimiento implementado en una unidad. Si está en el principal NO¿¿??). Si quito esta llamada, me da tambien error en "Imprimir". La culpa está comprobado que e
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con las unidades (UNIT)

Publicado por Angel (3 intervenciones) el 16/08/2002 11:01:19
Donde pone "Inserta" del programa ppal. debe poner "Insertar". Accidentalmente he borrado la "r" final pero, evidentemente, no va por ahí el error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con las unidades (UNIT)

Publicado por pablo molucas (15 intervenciones) el 16/08/2002 16:13:50
Creo que el error es el siguiente:
si declaras dos arrays, aunq sean iguales:

var
x:array [1..10] of integer;
y:array [1..10] of integer;

luego en el p.ppal no puedes hacer operaciones como x:=y.
Nunca entendi realmente pq da errores de este tipo, pero no funciona. Veo que has declarado el tipo lista tanto en la unidad como en el p.pal. Prueba a quitar la declaracion en el p.pal, y creo que asi deberia de funcionarte. Ademas los errores que comentas los da todos con el tipo lista, asi q el fallo ha de estar necesariamente ahi, aunq no sea esto q te digo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con las unidades (UNIT)

Publicado por Diego Romero (786 intervenciones) el 16/08/2002 17:26:22
Asi es, el error es que tienes declarado lista= record en el principal y en la Unit y para Pascal son dos tipos de datos diferentes no importa si se llaman igual y son exactamente del mismo tamaño.
La solución sería que quites la declaración de lista= record del principal de modo que la variable l : lista ; asuma el tipo declarado en la Unit que es lo correcto.
El por qué es asi tiene una respuesta muy simple, el compilador genera dos simbolos distintos para lista=record del principal y lista=record de la unit, es decir son dos cosas distintas y como Pascal tiene tipo de datos estricto los considera tipos de datos incompatibles.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con las unidades (UNIT)

Publicado por Angel (2 intervenciones) el 16/08/2002 20:27:08
Efectivamente, el error está en declarar el registro en el ppal. Si lo quito funciona perfectamente.
Es lógico: estoy declarando dos tipos distintos: uno en la unidad y otro en el ppal. Lo curioso es que el compilador no detecte (informe cuando menos con Warning) la doble inclusión del "Type".
Muchísimas gracias por vuestra ayuda porque os juro que yo, por más que lo miraba, no lo veía.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con las unidades (UNIT)

Publicado por Diego Romero (786 intervenciones) el 17/08/2002 00:10:03
No sé qué compilador estas usando pero al menos el TP7 no tiene "warnings" aunque opino que debería :).
Igualmente no es un error ni mucho menos tener una type en el principal y otra en alguna Unit pero como ves puede prestarse a confusión.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas con las unidades (UNIT)

Publicado por Angel (3 intervenciones) el 17/08/2002 00:29:48
Es que lo mio es el C. Y si te digo la verdad he hecho tan pocas cosas en Pascal que ni habia reparado en que no había Warning:-)))
Lo dicho Diego, y los demás que me habeis ayudado, muchisimas gracias por la colaboracion.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar