не удалось получить унаследованный общий указатель на get_widget

Я использую базовый класс в C ++ для имитации интерфейса в Java, поэтому мне не нужно повторять какой-то код или создавать объект для каждого другого класса, который я создаю.

В основном он содержит RefPtr для GtkBuilder, который я буду использовать в приложении.

Но я обнаружил, что программа завершается всякий раз, когда я обращаюсь к ней из унаследованного класса.

class SetupUIClass{
public:
SetupUIClass(std::string builderResourceString, Glib::ustring baseWidgetName){
}
SetupUIClass(Glib::RefPtr<Gtk::Builder> builder, Glib::ustring baseWidgetName){
this->builder = builder2;
//Point A
}
protected :
Glib::RefPtr<Gtk::Builder> builder;
}
class MyApplicationWindow: public SetupUIClass, public Gtk::ApplicationWindow{
public:
MyApplicationWindow(std::string builderResourceString, Glib::ustring baseWidgetName){
SetupUIClass(builderResourceString, baseWidgetName);
Glib::RefPtr<Gtk::Builder> builder2 = Gtk::Builder::create_from_resource(builderResourceString);
//Point B

MyApplicationWindow(builder2, baseWidgetName);

}
MyApplicationWindow(Glib::RefPtr<Gtk::Builder> builder2, Glib::ustring baseWidgetName){
//Point C
}
}

Так что переменная builder содержит указатель на gtkbuilder.

я использую builder->get_widget(widgetname, somewidgetpointer) чтобы проверить, работает ли моя программа в порядке.

В точке B я могу сделать builder2-> который использует локально созданный указатель, программа продолжает работать.

Затем программа переходит в точку А, где я назвал супер-конструктор, в точке А я могу сделать оба builder2-> а также this->builder->, которые являются соответственно указателем, переданным в конструктор и защищенную переменную, программа продолжает выполняться.

однако, когда я достигаю точки C, где он может получить доступ только к унаследованному защищенному указателю, когда я делаю this->builder->get_widget, программа останавливается без вывода или ошибки.

Я почесал голову над этим. Что-то я не так сделал?

  • Унаследованный класс не может получить доступ к адресу, на который указывает унаследованный защищенный указатель?
  • Refpointer вылечился и жизненный цикл GTK Builder закончился?
  • адрес изменился как переход от одного класса к другому?

Любая помощь будет оценена. Или, может быть, укажите, если я все время делаю что-то не так.

ОБНОВИТЬ
Я сделал дополнительную проверку, if(builder) вернул false в точке C, но не в точке A, что и стало причиной проблемы. Но разве я не должен хранить переменную построителя уже в конструкторе суперкласса?

в Глеб документация он заявляет, что позволяет копировать.

0

Решение

кажется, я был введен в заблуждение некоторыми другими сообщениями стека синтаксиса вызова конструктора базового класса. после использования возможно правильного метода инициализации

MyApplicationWindow::MyApplicationWindow(Glib::RefPtr<Gtk::Builder> builder2, Glib::ustring baseWidgetName):SetupUIClass(builder2, baseWidgetName){

вместо

MyApplicationWindow(std::string builderResourceString, Glib::ustring baseWidgetName){
SetupUIClass(builderResourceString, baseWidgetName);

эта конкретная проблема кажется решенной.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]