qt 应用程序和 std::shared_ptr
Posted
技术标签:
【中文标题】qt 应用程序和 std::shared_ptr【英文标题】:qt application and std::shared_ptr 【发布时间】:2012-03-06 19:28:52 【问题描述】:我想创建一个使用我的库的 qt 应用程序(使用 qt-creator),它是在 VS2010 中构建的。一个库包含一个使用 std::shred_ptr
的类#include <memory>
struct MyStruct;
class MyClass
public:
MyClass::MyClass();
protected:
std::shared_ptr<MyStruct> mMember;
然后我使用This tutorial 将库包含到应用程序中。 并得到下一个错误:
ISO C++ forbids declaration of 'shared_ptr' with no type
invalid use of '::'
expected ';' before '<' token
有办法解决这个问题吗?
*PS*已更正代码(添加了 shared_ptr 的包含和参数类)。 但是这些东西已经在原始代码中了。 我认为,问题出在 qt-creator 编译器中。但我不知道具体,因为我是 qt 编程的新手。
【问题讨论】:
【参考方案1】:确保您使用 C++11 标志编译器。例如,在您的 .pro-文件中:
QMAKE_CXXFLAGS += -std=c++0x
【讨论】:
谢谢,我前段时间找到了这个解决方案。但它仍然没有灵丹妙药。它抑制shared_ptr
的问题,但不识别nullptr
关键字。所以我决定 - 最好的解决方案是在同一个编译器上构建应用程序,即构建该库。所以我会尝试绑定vs2010和qt,并使用vs2010构建应用程序。祝我好运)))。
无法识别 nullptr 关键字?嗯……很奇怪。 VC2010支持这个关键字(blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx)...
VS2010 识别... QtCreator 不识别【参考方案2】:
在您共享的代码中没有MyClass2
的定义。
我相信你正在尝试做std::shared_ptr<MyClass> mMember;
【讨论】:
Here 你可以找到和你类似的例子。【参考方案3】:在定义类之前包含<memory>
。还要确保声明了MyClass2
。
【讨论】:
以上是关于qt 应用程序和 std::shared_ptr的主要内容,如果未能解决你的问题,请参考以下文章
`std::optional` 比 `std::shared_ptr` 和 `std::unique_ptr` 有啥优势?
这是 std::vector 和 std::shared_ptr 内存泄漏的错误吗?