【问题标题】:How can I compile C++11 code with Orwell Dev-C++?如何使用 Orwell Dev-C++ 编译 C++11 代码?
【发布时间】:2012-11-16 18:56:52
【问题描述】:

尝试编译以下代码:

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

我该如何处理?

【问题讨论】:

  • 我没有提到的 IDE,但我怀疑代码示例可能会被缩减很多,可能会像 #include &lt;memory&gt; int main () { std::unique_ptr&lt;int&gt; p;} 这样。这将大大减少您帖子中不必要的混乱。
  • 安装最新的 C++11 兼容编译器,例如GCC

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


【解决方案1】:

请确保在编译时提供正确的 -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 默认使用 C++03 的 GNU 方言(似乎不支持 unique_ptr)。

【讨论】:

  • 我在选择语言标准为 GNU C++11 时还有一个问题,它给了我“无法识别的命令行选项“-std=c++0x”
  • 尝试选择 GNU C++ 标准。看起来我需要将 ISO C++11 标志从“c++0x”更新为“c++11”。
  • 你能得到这个工作吗?我安装了最新的 Dev-C++ 5.4.2 ,但是当我尝试启用 c++11 时仍然出现“无法识别的命令行选项”-std=c++0x”错误。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-12-24
    • 2019-08-24
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 2012-02-17
    相关资源
    最近更新 更多