2012-03-19 3 views
18

Я думаю, это неловко, если бы я сказал вам, что не могу это скомпилировать. Не могли бы вы мне помочь: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 
+2

'gcc' почти никогда не используется, не проходя несколько вариантов. Попробуйте хотя бы 'g ++ -std = C++ 0x -pedantic main.cpp'. –

+5

Почему вы используете std :: если у вас есть пространство имен std; в любом случае? – Azrael3000

+0

спасибо. это сработало. 1- почему вы не отправляете ответ, чтобы я мог отметить его как истину. 2 - пока вы на нем, не могли бы вы дать мне короткую причину, почему gcc никогда не используется (и вместо этого используется g ++) или, возможно, ссылку на ссылку? спасибо – rahman

ответ

31

Это только предположение.

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

g++ main.cpp 

Если вы сделали, то проблема заключается в том, что г ++ использует C++ 03 по умолчанию. Для использования C++ 11 функций (и std::unique_ptr), вам нужно использовать более новую версию C++:

g++ -std=c++11 

или

g++ -std=c++14 

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

+0

Я столкнулся с той же проблемой, но флаг '-std = C++ 11' включен и включены все необходимые заголовки. Не могу понять, что не так: https://gist.github.com/canadien91/2ba3f9576823159c2d52 – Montreal

+0

для справок в будущем: @Montreal #include Stuck

+0

@Stuck, hmm, in my gist включен. Но я не помню, когда я добавил это. – Montreal

3

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

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