Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-12-2009
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 02-12-2009
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 910
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Código:
//Cadenas:=TStrings.Create;
//Debe ser...
Cadenas:=TStringList.Create;
Cita:
Empezado por Kandorf Ver Mensaje
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
Responder Con Cita
  #3  
Antiguo 02-12-2009
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
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...
Responder Con Cita
  #4  
Antiguo 02-12-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 02-12-2009
Avatar de DarkMan
DarkMan DarkMan is offline
Miembro
 
Registrado: jul 2006
Posts: 102
Poder: 18
DarkMan Va por buen camino
Cita:
Empezado por Kandorf Ver Mensaje
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.
__________________
"La recompensa de una buena acción está en haberla hecho"
Responder Con Cita
  #6  
Antiguo 03-12-2009
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 04-12-2009
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear Objeto por su nombre de clase jlrbotella OOP 2 09-01-2008 00:44:37
problema crear dll con clase rzf1983 Varios 9 08-11-2007 23:56:52
crear un evento en una clase? chelox OOP 4 06-06-2007 21:14:20
Crear clase. Basico de POO. DarkByte OOP 17 24-08-2005 18:37:21
Fastreport, problemas en la primera toma de contacto rvinfo Impresión 2 09-10-2003 18:13:32


La franja horaria es GMT +2. Ahora son las 11:02:34.


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
Copyright 1996-2007 Club Delphi