C++ 在qt成员变量中使用unique_ptr

C++ 在qt成员变量中使用unique_ptr,c++,qt,smart-pointers,C++,Qt,Smart Pointers,我想对QMenu使用unique_ptr,而不将其作为基本小部件的子部件,所以我这样声明它 private: std::unique_ptr<QMenu> m_pMenu; private: 标准::唯一的菜单; 和在构造函数中 std::unique_ptr<QMenu> m_pMenu ( new QMenu()); m_pMenu->setObjectName("JobContextMenu"); std::unique_ptr m_pMenu(新QMe

我想对QMenu使用unique_ptr,而不将其作为基本小部件的子部件,所以我这样声明它

private:
std::unique_ptr<QMenu> m_pMenu;
private:
标准::唯一的菜单;
和在构造函数中

std::unique_ptr<QMenu> m_pMenu ( new QMenu());
m_pMenu->setObjectName("JobContextMenu");
std::unique_ptr m_pMenu(新QMenu());
Mpmenu->setObjectName(“作业上下文菜单”);
我还补充说 CONFIG+=c++11在my.pro文件中 但是在编译unique_ptr时,会返回一个错误 对不完整的类型“QMenu”应用“sizeof”无效

重复定义。 同样,你可以用C++ 11的方式:

private:
std::unique_ptr<QMenu> m_pMenu = std::unique_ptr<QMenu>(new QMenu);
private:
std::unique_ptr m_pMenu=std::unique_ptr(新QMenu);

你所说的“重复定义”是什么意思?你不应该把
新的
独特的\u ptr
混为一谈。使用<代码> STD::MaMaIOLION/OFFECT>构造MunuMaxIONE是C++ 14的特性,而不是C++ 11-确定,它是C++ 14(OP没有提到不能使用),但是这个特性在所有主要编译器中都支持了一段时间。我否决了你的答案,因为它缺乏实质性内容,而且建议已经过时,而且随着时间的推移和人们将来对这个答案的关注,这种情况只会变得更加严重。@NicolasHolthaus,也许在你们的美国,每个人都使用最新的编译器,但在俄罗斯和大多数国家(据我所知)许多使用编译器版本的作品都有很大的限制。因此,考虑到这一事实是非常可取的。主题启动程序将他的配置设置为C++ 11,我给C++ 11提供建议。