继承的共享指针无法get_widget
inherited shared pointer failed to get_widget
我正在使用 c++ 中的基类来模仿 Java 中的接口,这样我就不必为我创建的每个不同的类重复一些代码或创建对象。
基本上,它包含GtkBuilder的RefPtr,我将在整个应用程序中使用它。
但是我发现每当我从继承的类访问它时,该程序都会终止。
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->
使用本地创建的指针,程序继续运行。
然后程序进入 A 点,在那里我调用了超级构造函数,在 A 点,我可以同时执行builder2->
和this->builder->
,分别是传递到构造函数和保护变量的指针,程序继续运行。
但是当我到达 C 点时,它只能访问继承的受保护指针,当我this->builder->get_widget
时,程序停止而没有任何输出或错误。
我为此挠头。是不是我做错了什么?
继承- 的类无法访问继承的受保护指针指向的地址?
- 引用指针自行清理,GTK 构建器的生命周期结束了?
- 地址更改为从一个班级到另一个班级?
任何帮助将不胜感激。或者请指出我是否一直做错了什么。
更新我做了一些进一步的检查,if(builder)
在 C 点返回 false 但没有返回 A,这就是导致问题的原因。但是我不应该已经将构建器变量存储在超类构造函数中吗?
在 Glib 文档中,它声明它允许复制。
似乎我被调用基类构造函数语法的其他一些堆栈帖子误导了。 使用可能正确的初始化方法后
MyApplicationWindow::MyApplicationWindow(Glib::RefPtr<Gtk::Builder> builder2, Glib::ustring baseWidgetName):SetupUIClass(builder2, baseWidgetName){
而不是
MyApplicationWindow(std::string builderResourceString, Glib::ustring baseWidgetName){
SetupUIClass(builderResourceString, baseWidgetName);
这个特殊问题似乎已经解决了。
相关文章:
- Cpp-Tuple使用带有变量的get
- 通过 get-Method 访问变量在类外不起作用
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- C++中是否有任何函数等同于python中字典的get函数?
- 使用istringstearm和get行缓慢读取文件
- 如何将 c++ get 函数代码转换为 opencv 算法中使用的 python
- 使用 cin.get() 初始化字符数组
- std::variant<>::get() 不能使用 Apple LLVM 10.0 编译
- Widget&&rhs 是左值还是右值引用
- 编写 cin.get() 以接收字符数组时出现问题
- 作用域枚举和标准::get
- Visual Studio 2017 中的 cpprestapi 问题找不到 POST/GET 常量
- 在 C++/C 中使用 CURL 发出带有数据文件的 GET HTTP 请求
- 使用静态 qmake 的 QT Widget 插件
- 使用"push_back"作为带有"get"函数C++的向量
- 使用 cin.get 读取字符数组
- 如何使用 fstream 的 .get 字符串?
- std::get like (partial) template specialization
- 从 unique_ptr::get 发送指针作为指针引用进入函数