Ребят, прошу больно не бить, учу плюсы и столкнулся с такой бедой. Создаю окно с разметкой из glade файла таким образом:
#include <gtkmm.h>
#include <iostream>
#include "./win.cpp"
int main (int argc, char *argv[]){
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
auto refBuilder = Gtk::Builder::create();
Gtk::Window* TestWin;
//MainWindow* TestWin;
try{
refBuilder->add_from_file("./test.glade");
}
catch(const Glib::FileError& ex){
std::cerr << "!! FileError: " << ex.what() << std::endl;
}
catch(const Glib::MarkupError& ex){
std::cerr << "!! MarkupError: " << ex.what() << std::endl;
}
catch(const Gtk::BuilderError& ex){
std::cerr << "!! BuilderError: " << ex.what() << std::endl;
}
refBuilder->get_widget("window_id", TestWin);
if(TestWin)
return app->run(*TestWin);
else{
std::cout << "Ошибка загрузки виджета." << std::endl;
return 1;
}
}
И как не странно, оно код компилируется и даже работает, без проблем загружает разметку и выдаёт нужное окно.
Проблема появляется, когда я пытаюсь наследовать свой класс и уже ему передать файл разметки. Сам класс пока что практически ничем не отличается, создан исключительно в учебных целях:
class MainWindow : public Gtk::Window{
public:
virtual ~MainWindow(){
std::cout << "Окно закрыто." << std::endl;
}
protected:
void on_button_clicked(){ //Обработчик сигналов от кнопки
std::cout << "Hello World" << std::endl;
}
};
И теперь если в функции main() закоментировать строку "Gtk::Window* TestWin;" и раскоментировать "MainWindow* TestWin;", в попытке создать окно из своего класса, то компилятор выдаёт следующее:
** (program:22060): CRITICAL **: 18:50:50.811: Gtk::Builder::get_widget(): dynamic_cast<> failed.
Ошибка загрузки виджета.
Искренне пытался гуглить, но что то совсем никак не получается понять, что ему от меня надо...