| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Jue 08 Dic, 2005 1:00 pm Asunto: TSringList en el constructor |
|
|
Hola,
Tengo un problema, me he creado una clase, resumiendo:
en el .h
| Código: |
#ifndef ClsHerramientasH
#define ClsHerramientasH
class THerramientas
{
private:
TStringList *LstNombre;
// ....
public:
__fastcall THerramientas(TComponent* Owner);
__fastcall ~THerramientas();
// ...
};
extern PACKAGE THerramientas *Herramientas;
#endif
|
En el cpp
| Código: |
THerramientas *Herramientas;
//---------------------------------------------------------------------------
__fastcall THerramientas::THerramientas(TComponent* Owner)
{
LstNombre = new TStringList;
}
// ...
|
Bien al utilizar la el StringList me da un error, como si no se hubiese creado. Por ejemplo: LstNombre->Add("kk");
¿ Me he dejado algo ?
Gracias y un saludo. |
|
| Volver arriba |
|
 |
LordNemesis Master


Registrado: 31 Dic 2003Mensajes: 340Ubicación: México
|
Publicado: Jue 08 Dic, 2005 6:06 pm Asunto: |
|
|
Sin duda está extraño tu error.... lo único que se me pudiese ocurrir es que no este entrando a ese constructor a la hora de crearse.... ¿¿ya pusiste un breakpoint para comprobar que si entra por ahi?? _________________ Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!! |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Jue 08 Dic, 2005 6:08 pm Asunto: |
|
|
Si, puse un breakpoint en el constructor y nada, no entra.
Por eso lo veo raro. |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Jue 08 Dic, 2005 7:52 pm Asunto: |
|
|
Hola, kalux.
¿Se parece a esta la línea con que declaras tu THerramientas?
| Código: | THerramientas *h; |
Si es así, LordNemesis te pone sobre la pista: estás usando el constructor por defecto de la clase, que tú no has definido. Tú has definido un constructor que recibe como parámetro el propietario del objeto creado. Si pruebas a eliminar el parámetro del constructor (TComponent* Owner) tanto en el .h como en el .cpp seguramente tu código funcionará como esperas. Si no necesitas ese parámetro y no lo usas en tu código posiblemente sea la mejor opción.
Suerte. _________________ Ojos ... no son ojos porque los ves, son ojos porque te miran |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Jue 08 Dic, 2005 9:46 pm Asunto: |
|
|
Hola,
¿ Os estais refiriendo al cambiar el constructor ? Por este que pongo:
| Código: |
#ifndef ClsHerramientasH
#define ClsHerramientasH
class THerramientas
{
private:
TStringList *LstNombre;
// ....
public:
__fastcall THerramientas();
__fastcall ~THerramientas();
// ...
};
extern PACKAGE THerramientas *Herramientas;
#endif
|
| Código: |
THerramientas *Herramientas;
//---------------------------------------------------------------------------
__fastcall THerramientas::THerramientas()
{
LstNombre = new TStringList;
}
// ...
|
Con este cambio me sigue pasando lo mismo. Que no entra por el constructor.
He puesto un breakpoint en el constructor, en la linea:
LstNombre = new TStringList
Y no para. |
|
| Volver arriba |
|
 |
Enrique Master


Registrado: 13 Ago 2002Mensajes: 261Ubicación: La Vila Joiosa (Alacant)
|
Publicado: Jue 08 Dic, 2005 10:35 pm Asunto: |
|
|
A menudo el Builder me hace cosas inesperadas, como dices. Pero tiene muy buenas herramientas para depurar. Haz la siguiente prueba:
1) Pon un breakpoint en la línea de código en que se declara un objeto (puntero) de tu clase THerramientas.
2) Si no se detiene ahí ya sabes por qué no actúa el constructor de la clase, es porque no estás creando ningún objeto de tu clase. Busca la solución por otro sitio antes de volverte loco por donde vas.
3) Si se detiene ahí haz un trazado con F7 (Trace into). Como se está declarando un objeto (puntero) deberá consultar cómo se crea y te abrirá el constructor que está utilizando.
Suerte. _________________ Ojos ... no son ojos porque los ves, son ojos porque te miran |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Vie 09 Dic, 2005 12:18 am Asunto: |
|
|
Que tal Kalux,
Me he creado una clase (con otro nombre) tratando de hacer lo que necesitas y no he tenido problemas.
El .h
| Código: |
#ifndef MiFacturaH
#define MiFacturaH
#include <Classes.hpp> //No sé si la has agregado??
//---------------------------------------------------------------------------
class TFactura
{
private:
TStringList *Lista;
public:
__fastcall TFactura(TComponent* Owner);
__fastcall ~TFactura();
void __fastcall Agregar(String valor);
void __fastcall MostrarItems();
};
#endif
|
en el .cpp
| Código: |
#pragma hdrstop
#include "MiFactura.h"
#include "vcl.h" // Agregue esta cabecera para poder
// utilizar la función ShowMessage
//---------------------------------------------------------------------------
TFactura *Factura;
#pragma package(smart_init)
__fastcall TFactura::TFactura(TComponent* Owner)
{
Lista = new TStringList;
}
__fastcall TFactura::~TFactura()
{
delete Lista;
}
void __fastcall TFactura::Agregar(String valor)
{
Lista->Add(valor);
}
void __fastcall TFactura::MostrarItems()
{
for ( int i = 0; i < Lista->Count; i++ )
ShowMessage(Lista->Strings[i]);
}
|
y luego en un form utilizó la clase (agregando la cabecera claro)
| Código: |
//Crear instancia
TFactura *Fac = new TFactura(this);
//Agregar tres elementos a la lista
Fac->Agregar("Factura uno");
Fac->Agregar("Factura dos");
Fac->Agregar("Factura tres");
//Mostrar elementos agregados
Fac->MostrarItems();
//liberar memoria
delete Fac;
|
Espero te sirva de algo.
Nota: Utilizo C++ Builder 6.0 patch 4
Saludos _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
kalux Master


Registrado: 21 Nov 2003Mensajes: 313Ubicación: Alicante - España
|
Publicado: Vie 09 Dic, 2005 12:55 am Asunto: |
|
|
Solucionado.
He reiniciado el ordenador, arrancado de nuevo el Builder y ...
misteriosamente ahora funciona, pasa por el contructor y de momento de bien.
No se a que puede ser debido. Llevo varios dias el ordenador encendido (emule), y ejecutado varios programas y juegos. Como no sea que ha ido acumulando basura, no me lo explico.
Gracias a todos. |
|
| Volver arriba |
|
 |
|