Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Array de objetos propios? (https://www.clubdelphi.com/foros/showthread.php?t=53321)

gandalf_uy 18-02-2008 19:07:19

Array de objetos propios?
 
Tengo un problema al intentar hacer un array de un objeto que he creado.

Código Delphi [-]
unit miprueba;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type

  TDias = class
     Nombre : String;
     Constructor Crear;
     Destructor Eliminar;
  end;

  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Ventanas : array [1..2] of TDias;

implementation

{$R *.dfm}

constructor TDias.Crear;
begin
     inherited create;
     Nombre := '';
end;

destructor TDias.Eliminar;
begin
     inherited Destroy;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
     Ventanas[1].Crear;
end;

end.


Me compila bárbaro pero al intentar crear el objeto de la primer posición del array me da un error.

Alguna idea de que puede ser?

cHackAll 18-02-2008 19:44:10

No estoy del todo seguro pero por lo que veo allí hay un error lógico... estas llamando al constructor y destructor heredado de la clase... pero la clase no es heredada. (debiese ser primero virtual al ser la padre)

Ej.

Código Delphi [-]
TDias = class(TAlgo)
 Nombre : String;
 Constructor Crear; override;
 Destructor Eliminar; override;

...

end;

tambien esta el dato que te comentaba... si no estas heredando como puedes llamar al método heredado¿?¿?¿?

Cita:

Empezado por gandalf_uy
Código Delphi [-]
inherited create;

...

inherited Destroy;

0j0: POO

Saludos

Héctor Randolph 18-02-2008 19:47:14

Por otra parte, es posible que por acá también te venga un error:

Código Delphi [-]
 // Ventanas[1].Crear; // <---  Esto no va
 Ventanas[1]:=TDias.Crear;

Saludos

cHackAll 18-02-2008 19:49:40

Cita:

Empezado por Héctor Randolph (Mensaje 266715)
Por otra parte, es posible que por acá también te venga un error...

Tambien puede ser.

Saludos

Al González 20-02-2008 13:05:39

¡Hola!

Cita:

Empezado por gandalf_uy (Mensaje 266686)
...pero al intentar crear el objeto de la primer posición del array me da un error...

gandalf_uy, te faltó mencionar algo muy importante: el mensaje de error que aparece en pantalla. ;)


Cita:

Empezado por cHackAll (Mensaje 266710)
...la clase no es heredada. (debiese ser primero virtual al ser la padre)...si no estas heredando como puedes llamar al método heredado¿?¿?¿?

Según parece, el problema no tiene que ver con la ausencia o presencia de virtualidad en ningún método Javier. Las llamadas puestas por gandalf_uy al constructor Create y al destructor Destroy son válidas, ya que al no haber indicado una clase padre para TDias, el compilador toma a TObject (la clase ancestral base de cualquier otra) como su clase padre. En ese caso está llamando a TObject.Create y TObject.Destroy.

Cita:

Empezado por Héctor Randolph (Mensaje 266715)
Por otra parte, es posible que por acá también te venga un error:

Código Delphi [-]
 // Ventanas[1].Crear; // <---  Esto no va
 Ventanas[1]:=TDias.Crear;

Saludos

Yo diría que es casi seguro Héctor (a falta de más información por parte de gandalf_uy). No se estaba llevando a cabo una correcta instanciación del objeto.

Cabe mencionar gandalf_uy, que el constructor y el destructor que has definido en TDias son innecesarios, ya que el primero no hace nada que no haga ya el constructor Create heredado de TObject, y el segundo sólo llama al destructor Destroy. Si la clase TDias tuviese algo que inicializar o destruir de manera especial, entonces si tendrían utilidad.

Por último, te pregunto dos cosas:
¿Cómo te fue después de estas orientaciones? ¿Cuál es el objetivo de ese arreglo? (esto para ver si existen mejores alternativas).

Saludos.

Al González.

gandalf_uy 20-02-2008 14:14:01

La verdad es que lo resolví haciendo un TObjectList, pero pruebo las sugerencias y comento como me fue.

Salu2 y muchas gracias a todos por responder.

AzidRain 26-02-2008 04:19:48

Me parece que era la elección natural en este caso pero que bueno que ya lo descubriste de esto se trata.


La franja horaria es GMT +2. Ahora son las 10:32:03.

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