Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Nucleorion en 11 Febrero 2017, 23:10 pm



Título: Donde hay que declarar las funciones propias que usan controles creados
Publicado por: Nucleorion en 11 Febrero 2017, 23:10 pm
Tengo un programa en c++ en el que uso controles de wxwidgets. El IDE que uso es CodeBlocks. Yo declaraba mis funciones justo antes de donde aparecen las funciones que crean los manejadores de los controles añadidos al formulario. Pero si intento hacer uso de una propiedad de un control me dice que no esta declarado.

Por ejemplo un wxTextCtrl llamado txtRuta y lo que hago es coger el texto en una funcion que quiero que este disponible despues de construirse el form.

aplicacionMain.cpp
Código
  1. ...
  2. void aplicacionFrame::OnAbout(wxCommandEvent& event)
  3. {
  4.    wxString msg = wxbuildinfo(long_f);
  5.    wxMessageBox(msg, _("Welcome to..."));
  6. }
  7.  
  8. //Aqui es donde coloco las funciones que quiero que esten disponibles
  9. wxString PerfilActual(){
  10.    wxString ruta=wxString::Format(txtRuta->GetValue()+"\\UserData\\PerfilActual.txt");
  11.    return ruta;
  12. }
  13.  
  14. //Aqui van las funciones que creo desde el IDE
  15. void aplicacionFrame::OnButtonClick(wxCommandEvent& event)
  16. {
  17.    wxString mensaje=PerfilActual();
  18.    wxMessageBox(mensaje,"Aviso", wxICON_INFORMATION);
  19. }
  20. ...
  21.  

El "error: 'txtRuta' was not declared in this scope" es porque coloco mal la funcion PerfilActual o hago mal otra cosa?



Título: Re: Donde hay que declarar las funciones propias que usan controles creados
Publicado por: ivancea96 en 12 Febrero 2017, 13:53 pm
No usé wx, pero te adelanto algo:
txtRuta no es una global, así que no podrás usarla en la función (es así, no está definida).
Si no me equivoco, ese control deberías poderlo usar en métodos de la clase aplicacionFrame, que es donde supongo que está declarado.

Lo que puedes hacer es 1 de 2: o que esa función sea un método de la clase aplicacionFrame, o pasar el txtRuta como parámetro a la función PerfilActual.


Título: Re: Donde hay que declarar las funciones propias que usan controles creados
Publicado por: Nucleorion en 13 Febrero 2017, 04:11 am
Efectivamente esta declarado en aplicacionFrame.

Como la funcion solo se va a usar en ese formulario he optado por hacer que sea un metodo de la clase aplicacionFrame.

Quedando asi:
Código
  1.    ...
  2.    void aplicacionFrame::OnAbout(wxCommandEvent& event)
  3.    {
  4.        wxString msg = wxbuildinfo(long_f);
  5.        wxMessageBox(msg, _("Welcome to..."));
  6.    }
  7.  
  8.    //Aqui es donde coloco las funciones que quiero que esten disponibles
  9.    wxString aplicacionFrame::PerfilActual(){
  10.        wxString ruta=wxString::Format(txtRuta->GetValue()+"\\UserData\\PerfilActual.txt");
  11.        return ruta;
  12.    }
  13.  
  14.    //Aqui van las funciones que creo desde el IDE
  15.    void aplicacionFrame::OnButtonClick(wxCommandEvent& event)
  16.    {
  17.        wxString mensaje=PerfilActual();
  18.        wxMessageBox(mensaje,"Aviso", wxICON_INFORMATION);
  19.    }
  20.    ...
  21.  

No olvidar que ademas debe ser declarada dentro de la clase aplicacionFrame en ...Main.h

Muchas gracias

Algun curso de video de c++ que llegue hasta la explicacion de clases y metodos?


Título: Re: Donde hay que declarar las funciones propias que usan controles creados
Publicado por: ivancea96 en 13 Febrero 2017, 10:07 am
http://www.minidosis.org/#/temas (http://www.minidosis.org/#/temas)
Vídeos, texto y ejercicios. Pero especialmente vídeos. De ese tema y otros.


Título: Re: Donde hay que declarar las funciones propias que usan controles creados
Publicado por: Nucleorion en 13 Febrero 2017, 13:13 pm
Genial!

Justo lo que necesitaba :)