Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

TSringList en el constructor

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: TSringList en el constructor Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Si, puse un breakpoint en el constructor y nada, no entra.
Por eso lo veo raro.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Solucionado.

He reiniciado el ordenador, arrancado de nuevo el Builder y ...
misteriosamente ahora funciona, pasa por el contructor y de momento de bien. Laughing

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
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.