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&lt;MyClass&gt; mMember;

【讨论】:

Here 你可以找到和你类似的例子。【参考方案3】:

在定义类之前包含&lt;memory&gt;。还要确保声明了MyClass2

【讨论】:

以上是关于qt 应用程序和 std::shared_ptr的主要内容,如果未能解决你的问题,请参考以下文章

`std::optional` 比 `std::shared_ptr` 和 `std::unique_ptr` 有啥优势?

这是 std::vector 和 std::shared_ptr 内存泄漏的错误吗?

shared_ptr<QCoreApplication> 崩溃

std::shared_ptr 和初始化列表

std::shared_ptr 和继承

使用相同的函数但重载不同的 std::tr1::shared_ptr<T> 和 std::shared_ptr<T>