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



正在尝试编译以下代码:

#include <iostream>
#include <memory>
struct Foo {
    Foo() { std::cout << "Foo::Foon"; }
    ~Foo() { std::cout << "Foo::~Foon"; }
    void bar() { std::cout << "Foo::barn"; }
};
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"的成员。

我该如何处理?

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

  • 对于非项目编译,请转到:编译器选项>>工具(选择编译器)>>>>>>代码生成>>设置(将"语言标准"设置为 C++11 选项)
  • 有关项目编译,请转到:项目>>编译器>>代码生成>>(将"语言标准"设置为 C++11 选项)

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

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

最新版本的

Dev-C++ 附带 TDM-GCC 9.2.0,默认为 C++17。

最新更新