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

3

试图编译以下代码:

#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' 的成员。

我该怎么处理?


我没有提到的集成开发环境,但我怀疑代码示例可以大大简化,可能只需要像这样 #include <memory> int main () { std::unique_ptr<int> p;}。这将极大地减少您帖子中不必要的混乱。 - Baum mit Augen
安装一个兼容C++11的最新编译器,例如GCC - Basile Starynkevitch
2个回答

11

编译时请确保提供正确的-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)。


当我选择语言标准为GNU C++11时,遇到了一个问题,它给了我一个“无法识别的命令行选项'-std=c++0x'” 的错误提示。 - Fihop
尝试选择GNU C++标准。看起来我需要将ISO C++11标志从'c++0x'更新为'c++11'。 - Orwell
1
你能让它正常工作吗? 我安装了最新的Dev-C++ 5.4.2,但是当我尝试启用c++11时仍然会出现“未识别的命令行选项”-std=c++0x“错误。 - Strahd_za

0

Dev-C++ 的最新版本附带了 TDM-GCC 9.2.0,其默认使用 C++17。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接