• Viernes 17 de Mayo de 2024, 02:32

Autor Tema:  Stack Overflow  (Leído 1519 veces)

Mialom

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Stack Overflow
« en: Miércoles 6 de Febrero de 2008, 12:42 »
0
Buenos dias, y muchas gracias de antemano

estoy teniendo un problema cuando le paso un parámetro adicional a un form en el constructor, porque necesito dicho parametro para la funcionalidad propia que le voy a dar al form nuevo. Pero al crearlo, se enbucla y al final me da un mensaje de desbordamiento de pila (Stack Overflow).

Muchas gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Stack Overflow
« Respuesta #1 en: Miércoles 6 de Febrero de 2008, 13:20 »
0
Depuralo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Mialom

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Stack Overflow
« Respuesta #2 en: Miércoles 6 de Febrero de 2008, 15:27 »
0
Hola de nuevo,
a lo mejor soy algo novato en esto, pero cuando lo estoy debugeando, en el constructor de mi form, salta al constructor de la clase base y de esta salta al constructor de la clase TForm que hereda de TCustomForm, que lo que hace es volver al constructor de mi form y asi hasta que se desborda la pila y me salta la excepción.

No llevo mucho tiempo programando asi que no se si se me estará escapando algo, pero lo de pasar un parámetro al constructor de un form ya lo hice en otra ocasión y me funcionó correctamente. He mirado el otro codigo y no veo diferencia aparente. Si alguien sabe algo acerca de que puede estar pasando, no se si se me estará escapando algo.

Muchas gracias de antemano.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Stack Overflow
« Respuesta #3 en: Miércoles 6 de Febrero de 2008, 15:39 »
0
Cita de: "Mialom"
a lo mejor soy algo novato en esto, pero cuando lo estoy debugeando, en el constructor de mi form, salta al constructor de la clase base y de esta salta al constructor de la clase TForm que hereda de TCustomForm, que lo que hace es volver al constructor de mi form y asi hasta que se desborda la pila y me salta la excepción.
Tenes que averiguar la razon por la cual pasa eso. No es mi fuerte el Builder y sin ver el codigo lo unico que se me ocurre es que le pasas a algun metodo la direccion de tu constructor ..

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Mialom

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Stack Overflow
« Respuesta #4 en: Miércoles 6 de Febrero de 2008, 16:28 »
0
Buenas tardes de nuevo,

El código es muy sencillo:
//-------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner, int x) // <-- Aqui pasa al constructor de la clase base
:TForm(Owner) // <-- Aqui entra y vuelve a mi constructor
{
   ...
}
//-------------------------------------------------------

Pasa de un constructor a otro hasta que se desborda la pila.

Su definición en el cabecero es:

__fastcall TForm1(TComponent* Owner, int x);

Y la llamada desde el otro fomulario es:

TForm *Form1 = new TForm(this, entero);
Form1->ShowModal();
delete Form1;

Muchas gracias, espero que esto explique mejor mi problema.
Un saludo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Stack Overflow
« Respuesta #5 en: Miércoles 6 de Febrero de 2008, 19:35 »
0
__fastcall TForm1::TForm1(TComponent* Owner, int x) // <-- Aqui pasa al constructor de la clase base

¿Cuando llega ahi? Vos estas haciendo new TForm, no TForm1 ...

:TForm(Owner) // <-- Aqui entra y vuelve a mi constructor

¿A tu constructor? Ahi lo que tiene que hacer es ir al constructor de TForm ...

¿No querras hacer esto en realidad?

Código: Text
  1.  
  2. TForm1 *Form1 = new TForm1(this, entero);
  3.  
  4.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Mialom

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Stack Overflow
« Respuesta #6 en: Jueves 7 de Febrero de 2008, 09:29 »
0
Buenos dias,



ya he encontrado una solución para pasar los parámetros al constructor del formulario, la cuestion es que el costructor se embucla hasta que se desborda la pila (Stack Overflow) debido a que el parámetro que le paso es de tipo Entero, he probado a pasarle parámetros de otro tipo de datos como AnsiString, String, TDateTime y Float y funciona perfectamente. De momento le pasaré el parametro como cadena de texto y ya dentro del formulario nuevo le haré un cast a entero, pero no he conseguido averiguar el porque de que no admita parámetros de valor entero.



Muchas gracias por vuestra ayuda, y si averiguo  el porque ya os lo contaré.

Un saludo