Donde hay que declarar las funciones propias que usan controles creados

Iniciado por Nucleorion, 11 Febrero 2017, 23:10 PM

0 Miembros y 1 Visitante están viendo este tema.

Nucleorion

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 (cpp) [Seleccionar]

...
void aplicacionFrame::OnAbout(wxCommandEvent& event)
{
   wxString msg = wxbuildinfo(long_f);
   wxMessageBox(msg, _("Welcome to..."));
}

//Aqui es donde coloco las funciones que quiero que esten disponibles
wxString PerfilActual(){
   wxString ruta=wxString::Format(txtRuta->GetValue()+"\\UserData\\PerfilActual.txt");
   return ruta;
}

//Aqui van las funciones que creo desde el IDE
void aplicacionFrame::OnButtonClick(wxCommandEvent& event)
{
   wxString mensaje=PerfilActual();
   wxMessageBox(mensaje,"Aviso", wxICON_INFORMATION);
}
...


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


ivancea96

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.

Nucleorion

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 (cpp) [Seleccionar]
   ...
   void aplicacionFrame::OnAbout(wxCommandEvent& event)
   {
       wxString msg = wxbuildinfo(long_f);
       wxMessageBox(msg, _("Welcome to..."));
   }
   
   //Aqui es donde coloco las funciones que quiero que esten disponibles
   wxString aplicacionFrame::PerfilActual(){
       wxString ruta=wxString::Format(txtRuta->GetValue()+"\\UserData\\PerfilActual.txt");
       return ruta;
   }
   
   //Aqui van las funciones que creo desde el IDE
   void aplicacionFrame::OnButtonClick(wxCommandEvent& event)
   {
       wxString mensaje=PerfilActual();
       wxMessageBox(mensaje,"Aviso", wxICON_INFORMATION);
   }
   ...
   


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?

ivancea96