如何使用Orwell Dev-C ++编译C ++ 11代码?

时间:2012-11-28 19:52:31

标签: c++ c++11 unique-ptr dev-c++

尝试编译以下代码:

#include <iostream>
#include <memory>

struct Foo {
    Foo() { std::cout << "Foo::Foo\n"; }
    ~Foo() { std::cout << "Foo::~Foo\n"; }
    void bar() { std::cout << "Foo::bar\n"; }
};

void f(const Foo &foo)
{
    std::cout << "f(const Foo&)\n";
}

int main()
{
    std::unique_ptr<Foo> p1(new Foo);  // p1 owns Foo
    if (p1) p1->bar();

    {
        std::unique_ptr<Foo> p2(std::move(p1));  // now p2 owns Foo
        f(*p2);

        p1 = std::move(p2);  // ownership returns to p1
        std::cout << "destroying p2...\n";
    }

    if (p1) p1->bar();

    // Foo instance is destroyed when p1 goes out of scope
}

使用Orwell Dev-c ++ 5.3.0.3会产生以下错误:

  

'unique_ptr'不是'std'的成员。

我该如何处理?

2 个答案:

答案 0 :(得分:10)

请确保在编译时提供正确的-std标志。 Orwell Dev-C ++使用的默认设置(不传递任何-std选项)不会启用一些闪亮的新C ++ 11函数,如unique_ptr。修复很简单:

  • 对于非项目编辑,请转到:工具&gt;&gt;编译器选项&gt;&gt; (选择你的编译器)&gt;&gt;设置&gt;&gt;代码生成&gt;&gt; (将“语言标准”设置为C ++ 11选项)
  • 对于项目编辑,请转到:项目&gt;&gt;编译器&gt;&gt;代码生成&gt;&gt; (将“语言标准”设置为C ++ 11选项)

以下是有关-std标志的更多信息: http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options

如您所见,GCC默认使用C ++ 03的GNU方言(似乎不支持unique_ptr)。

答案 1 :(得分:0)

最新版本的 Dev-C++ 随附默认为 C++17 的 TDM-GCC 9.2.0。