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
...
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?
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.
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:
...
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?
http://www.minidosis.org/#/temas (http://www.minidosis.org/#/temas)
Vídeos, texto y ejercicios. Pero especialmente vídeos. De ese tema y otros.
Genial!
Justo lo que necesitaba :)