Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   Error al asignar un valor (https://www.clubdelphi.com/foros/showthread.php?t=66324)

ioco 13-02-2010 17:06:58

Error al asignar un valor
 
Animado por la respuesta de Al Gonzalez a mi post sobre mi primera Unit, estoy haciendo esa misma unit en Lazarus como ejemplo de aplicación de lo que voy aprendiendo leyendo el libro del ftp "La cara oculta de Delphi".

He probado el código con Showmessage en lugar de la asignación que me da el problema y todo funciona bien hasta que empiezo a trabajar con la clase que he definido.

La unit es la siguiente:

Código Delphi [-]
unit Unit2; 

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Dialogs;

Type
  TUnidad = class
    Vida,Escudo,Disparos,Potencia,ConsumoElectrico,CosteMetal,CosteCristal,CosteDeuterio:integer;
    Procedure AsignarDatos;
  end;

Var
  Caza,Acorazado,Destroyer,Crucero,Pulsar,Bombardero:TUnidad;
  Sonda,RecicladorPeque,RecicladorGrande,TransportePeque,Cisterna:TUnidad;
  BateriaAntiaerea,RayoLaser,Gauss,ArtilleriaIntervalo,EmisorTaquiones:TUnidad;

implementation

Procedure TUnidad.AsignarDatos;
          Begin
               {Aquí está el problema, aunque si no he entendido mal el libro, 
               se  hace así o incluso se podría omitir el Self dejando solo Vida:=70}
               Self.Vida:=70;
          end;

end.


La llamo desde un botón en un formulario con:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);   
  begin
    Caza.AsignarDatos;
   end;




Entonces lo que sucede es que el programa se ejecuta bien, pero cuando presiono el botón me sale el mensaje: Project probando.exe raised exception class 'External: SIGSEGV'.

¿Se puede solucionar?

DriverOp 14-02-2010 00:23:07

Caza es un objeto. ¿Lo has creado llamando al constructor Create?

ioco 14-02-2010 15:05:03

Ups, gracias. No sé porqué al leerlo en el libro no lo relacioné... supongo que no acabo de entender algunos conceptos :(

Siento haber preguntado demasiado, la próxima vez que tenga una duda me esforzaré más.

DriverOp 14-02-2010 15:06:59

No olvides destruirlo cuando termines de usarlo.

Preguntar hace bien, preguntar bien hace milagros :D


La franja horaria es GMT +2. Ahora son las 18:55:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi