首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Dbo::QueryModel?

如何使用Dbo::QueryModel?
EN

Stack Overflow用户
提问于 2020-06-25 14:53:44
回答 1查看 101关注 0票数 0

我试图在Wt中开发一个应用程序,即使用Dbo模块和QueryModelWTableView中显示。

然而,当我尝试这样做的时候,

代码语言:javascript
复制
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);

理论上(我在网络上发现了类似的片段)这是好的,但我的编译器不同意:

代码语言:javascript
复制
/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(模型)铸造,这似乎是有意义的,但之后我得到了更多的阁楼希腊语:

代码语言:javascript
复制
/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);
      |                           ^
EN

回答 1

Stack Overflow用户

发布于 2020-06-28 19:25:05

您似乎没有多少使用std::shared_ptr的经验(或者根本没有智能指针)。读取https://www.geeksforgeeks.org/smart-pointers-cpp/可能很有用。

基本上,有两种方法可以构造共享指针:

  1. std::shared_ptr构造函数:为提供的原始指针构造一个新的共享指针。 dbo::QueryModel< dbo::ptr > *model = new dbo::QueryModel< dbo::ptr >();std::shared_ptr >> sharedModel =std::shared_ptr(模型)
  2. std::make_shared:构造一个类型为T的新对象,并将其封装在std::shared_ptr中 std::shared_ptr >> sharedModel = std::make_shared > >();

方法二较短,因此在大多数情况下是首选的,尽管有一些例外:什么时候要从原始指针构造共享指针?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62578237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档