尝试编译以下代码:
#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”的成员。
我该如何处理这个问题?
请确保编译时提供正确的 -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 http://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options
正如你所看到的,GCC 默认使用 C++03 的 GNU 方言(它似乎不支持 unique_ptr)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)