Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas al crear mi primera clase (https://www.clubdelphi.com/foros/showthread.php?t=65273)

Kandorf 02-12-2009 13:23:35

Problemas al crear mi primera clase
 
Hola, siento si esta duda ha sido posteada anteriormente, he usado el buscador y no he encontrado nada que respondiera a mis dudas.

Para un programa que estoy haciendo he creado una clase, llevo tiempo programando, pero nunca me había surgido crear una clase en delphi, ya la he terminado y me han surgido varios problemas.

1-Uno de los objetos que contiene esta clase es un TStrings, al intentar llamar a cualquier función de la clase TStrings me da un error, he probado a crear el objeto desde el constructor de mi clase de esta manera:
Código:

Cadenas:=TStrings.Create;
Esta función sí me la permite, pero si intento llamar a cualquier otra función después de hacer esto me sigue saliendo el error, la única diferencia es que en el Watch en vez de poner 'nil' ahora pone un número precedido de $.

De todas formas yo pensaba que con poner 'inherited' al principio del constructor de mi clase ya se inicializavan todas las variables de esta.

2-Para crear un objeto de mi clase tengo que llamar al constructor con:
Código:

Objeto:=TClase.Create;
Yo pensaba que con declarar el objeto ya valía teniendo en la clase un constructor llamado
Código:

constructor TClase.Create;
Un saludo y gracias por vuestro tiempo.

cloayza 02-12-2009 14:18:29

Código:

//Cadenas:=TStrings.Create;
//Debe ser...
Cadenas:=TStringList.Create;

Cita:

Empezado por Kandorf (Mensaje 347957)
Código:

Objeto:=TClase.Create;
Yo pensaba que con declarar el objeto ya valía teniendo en la clase un constructor llamado

Todas las clases hay que inicializaras (instanciarlas), no vale solo con definir una variable de tipo TClase y usarlar porque te arrojara un error.
Código Delphi [-]
var
    objeto:TClase;
begin
       Objeto.caption:='Titulo del la Clase'; //Esto te arrojara un error ya que la clase no ha sido instanciada.

       Objeto:=TClase.Create;
       Objeto.Caption:='Titulo del la Clase'; //Esto esta correcto..
end
Saludos

maeyanes 02-12-2009 15:11:00

Hola...

¿Podrías poner el código de tu clase? De esta forma podríamos ver que es lo que estás haciendo mal y darte sugerencias y soluciones...


Saludos...

roman 02-12-2009 15:32:05

No sé si haya otros problemas pero no puedes construir un objeto de la clase TStrings. Esta es una clase abstracta, lo que quiere decir que tiene métodos que sólo están declarados pero no implementados. Son las clases derivadas las que implementan dichos métodos. En su lugar, usa TStringList.

// Saludos

DarkMan 02-12-2009 18:33:36

Cita:

Empezado por Kandorf (Mensaje 347957)
2-Para crear un objeto de mi clase tengo que llamar al constructor con:
Código:

Objeto:=TClase.Create;
Yo pensaba que con declarar el objeto ya valía teniendo en la clase un constructor llamado
Código:

constructor TClase.Create;

Tomates con morcillas, en la clase estas declarando un constructor que se supone que hereda de un constructor de una clase anterior a la tuya (la clase mínima de la que heredar algo es TObject). Simplemente se declara de nuevo el constructor para realizar alguna tarea que requiera tu nueva clase al ser creada. Ten en cuenta que al crear una clase, se llama a su constructor y por eso se llama primero al constructor de tu clase.
Con "Objeto:= TClase.Create" estas llamando al constructor de tu clase, el cual llama al constructor heredado recursivamente, cuyo último fin es asignar a Objeto(puntero) una dirección de memoria que se corresponde a la clase creada.

Tu suposición de que los objetos se crean automáticamente sólo con declararlos en las variables por tener definidos en su estructura interna un constructor y un destructor es errónea.

Kandorf 03-12-2009 15:00:37

Muchas gracias por vuestras respuestas, no esperaba tanto y en tan poco tiempo. No he tenido tiempo de probarlo, en cuanto tenga un ratito que pueda dedicarle a programar os cuento qué tal me ha ido con vuestra ayuda, que seguro que bien.

PD: Los códigos que puse no pertenecen a mi programa, lo puse de esa manera para que fuera más aclarativo.

Saludos.

Kandorf 04-12-2009 01:00:23

Acabo de probar lo que dijo cloayza de inicializar el TStrings:
Código:

Cadenas:=TStringList.Create;
Ahora funciona perfectamente, muchas gracias a todos por vuestras respuestas, las tendré en cuenta.


La franja horaria es GMT +2. Ahora son las 06:07:23.

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