ошибка компиляции unique_ptr

Я думаю, это смущает, если я сказал вам, что не могу это скомпилировать. не могли бы вы помочь мне:

#include<memory>
using namespace std;

int  main()
{
    std::unique_ptr<int> p1(new int(5));
    return 0;
}
$ gcc main.cpp 
main.cpp: In function ‘int main()’:
main.cpp:6:2: error: ‘unique_ptr’ was not declared in this scope
main.cpp:6:13: error: expected primary-expression before ‘int’
main.cpp:6:13: error: expected ‘;’ before ‘int’

$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1

person rahman    schedule 19.03.2012    source источник
comment
gcc почти никогда не используется без передачи некоторых опций. Попробуйте хотя бы g++ -std=c++0x -pedantic main.cpp.   -  person Luc Danton    schedule 19.03.2012
comment
почему вы используете std:: если вы используете пространство имен std; в любом случае?   -  person Azrael3000    schedule 19.03.2012
comment
благодаря. это сработало. 1- почему бы вам не опубликовать ответ, чтобы я мог отметить его как истинный. 2-пока вы занимаетесь этим, не могли бы вы указать мне короткую причину, почему gcc никогда не используется (и вместо этого используется g++) или, возможно, ссылку на ссылку? Благодарность   -  person rahman    schedule 19.03.2012
comment
@rahman: gcc = C, g++ = C++.   -  person AusCBloke    schedule 19.03.2012
comment
@AusCBloke gcc означает Gnu Compiler Collection, он автоматически определяет язык на основе расширения файла. Хотя использование g++ важно, если вы вызываете его исключительно как компоновщик, когда он не может вывести из расширения.   -  person M.M    schedule 17.02.2017


Ответы (2)


Это всего лишь предположение.

Скорее всего, вы скомпилировали свою программу так (или аналогично):

g++ main.cpp

Если да, то проблема в том, что g++ по умолчанию использует c++03. Чтобы использовать функции С++ 11 (и std::unique_ptr), вам необходимо использовать более новую версию С++:

g++ -std=c++11

or

g++ -std=c++14

и я бы рекомендовал использовать также -Wall -Wextra -pedantic.

person BЈовић    schedule 19.03.2012
comment
Я столкнулся с той же проблемой, но включен флаг -std=c++11 и включены все необходимые заголовки. Не могу понять, что не так: gist.github.com/canadien91/2ba3f9576823159c2d52 - person Montreal; 22.06.2015
comment
для дальнейшего использования: @Montreal #include ‹memory› - person Stuck; 16.02.2017
comment
@ Застрял, хм, в моем понимании «память» включена. Но я не помню сейчас, когда я добавил это. - person Montreal; 16.02.2017
comment
на самом деле основная ссылка для меня - это ошибка 404, поэтому у меня было только предположение ... потому что я столкнулся с той же проблемой. Для меня было бы полезно получить этот намек здесь под вашим комментарием. - person Stuck; 17.02.2017
comment
Стоит отметить, что функция std::make_unique требует C++14 - person Daniel Stevens; 12.09.2017

Если вы используете Code::Blocks, перейдите в раздел Настройки > Компилятор > Глобальные настройки компилятора > Настройки компилятора и найдите параметр Применять g++ в соответствии с C++11. Стандарт языка ISO C++ [-std=c++11] и проверьте его!

(Code::Blocks добавит -std=c++11 при компиляции)

person Sevener    schedule 21.08.2015