我试图在Wt中开发一个应用程序,即使用Dbo模块和QueryModel在WTableView中显示。
然而,当我尝试这样做的时候,
dbo::QueryModel< dbo::ptr<medical_staff> > *model = new dbo::QueryModel< dbo::ptr<medical_staff> >();
model->setQuery(session_.find<medical_staff>());
model->addAllFieldsAsColumns();
Wt::WTableView *view = new Wt::WTableView();
view->setModel(model);理论上(我在网络上发现了类似的片段)这是好的,但我的编译器不同意:
/home/phil/projects/TN-wt/src/view/StaffView.cxx:84:20: error: cannot convert ‘Wt::Dbo::QueryModel<Wt::Dbo::ptr<medical_staff> >*’ to ‘const std::shared_ptr<Wt::WAbstractItemModel>&’
84 | view->setModel(model);
| ^~~~~
| |
| Wt::Dbo::QueryModel<Wt::Dbo::ptr<medical_staff> >*这个错误在我看来就像阁楼一样,有人能带我走过这是怎么一回事吗?不幸的是,没有关于Dbo::QueryModel的文档。
此外,Wt工具包是否太旧,无法使用,无法维护?我现在应该放弃使用它吗?
编辑:我尝试了所有类型的std::make_shared(模型)铸造,这似乎是有意义的,但之后我得到了更多的阁楼希腊语:
/home/phil/projects/TN-wt/src/view/StaffView.cxx:82:27: error: no matching function for call to ‘make_shared(Wt::Dbo::QueryModel<Wt::Dbo::ptr<medical_staff> >*&)’
82 | std::make_shared(model);
| ^
In file included from /usr/include/c++/9/memory:81,
from /usr/include/Wt/Core/observable.hpp:12,
from /usr/include/Wt/Core/observing_ptr_impl.hpp:10,
from /usr/include/Wt/Core/observing_ptr.hpp:136,
from /usr/include/Wt/WGlobal.h:11,
from /usr/include/Wt/WObject.h:11,
from /usr/include/Wt/WWidget.h:10,
from /usr/include/Wt/WCompositeWidget.h:10,
from /home/phil/projects/TN-wt/src/view/StaffView.h:3,
from /home/phil/projects/TN-wt/src/view/StaffView.cxx:1:
/usr/include/c++/9/bits/shared_ptr.h:714:5: note: candidate: ‘template<class _Tp, class ... _Args> std::shared_ptr<_Tp> std::make_shared(_Args&& ...)’
714 | make_shared(_Args&&... __args)
| ^~~~~~~~~~~
/usr/include/c++/9/bits/shared_ptr.h:714:5: note: template argument deduction/substitution failed:
/home/phil/projects/TN-wt/src/view/StaffView.cxx:82:27: note: couldn’t deduce template parameter ‘_Tp’
82 | std::make_shared(model);
| ^发布于 2020-06-28 19:25:05
您似乎没有多少使用std::shared_ptr的经验(或者根本没有智能指针)。读取https://www.geeksforgeeks.org/smart-pointers-cpp/可能很有用。
基本上,有两种方法可以构造共享指针:
std::shared_ptr构造函数:为提供的原始指针构造一个新的共享指针。
dbo::QueryModel< dbo::ptr > *model = new dbo::QueryModel< dbo::ptr >();std::shared_ptr >> sharedModel =std::shared_ptr(模型)std::make_shared:构造一个类型为T的新对象,并将其封装在std::shared_ptr中
std::shared_ptr >> sharedModel = std::make_shared > >();方法二较短,因此在大多数情况下是首选的,尽管有一些例外:什么时候要从原始指针构造共享指针?
https://stackoverflow.com/questions/62578237
复制相似问题