Как я могу скомпилировать код C ++ 11 с помощью Orwell 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».

Как я могу справиться с этим?

3

Решение

Пожалуйста, убедитесь, что вы указали правильный флаг -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).

10

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]