2012-03-19 42 views
18

Tôi đoán điều này thật đáng xấu hổ nếu tôi nói với bạn rằng tôi không thể làm điều này để biên dịch. bạn sẽ vui lòng giúp tôi:lỗi biên dịch 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' hầu như không bao giờ sử dụng mà không đi qua một số tùy chọn. Hãy thử ít nhất 'g ++ -std = C++ 0x -pantic main.cpp'. –

+5

tại sao bạn sử dụng std :: nếu bạn đã sử dụng namespace std; anyways? – Azrael3000

+0

cảm ơn. nó đã làm việc. 1- tại sao bạn không đăng câu trả lời để tôi có thể đánh dấu nó là đúng. 2-trong khi bạn đang ở trên nó, xin vui lòng cho tôi một lý do ngắn gọn tại sao gcc là không bao giờ được sử dụng (và g ++ được sử dụng để thay thế) hoặc có lẽ liên kết đến một tài liệu tham khảo? cảm ơn – rahman

Trả lời

31

Đây chỉ là một phỏng đoán.

Nhiều khả năng bạn biên soạn chương trình của bạn như thế này (hoặc tương tự):

g++ main.cpp 

Nếu bạn đã làm, thì vấn đề là g ++ sử dụng C++ 03 như mặc định. Để sử dụng C++ 11 tính năng (và std::unique_ptr), bạn cần phải sử dụng phiên bản mới hơn của C++:

g++ -std=c++11 

hoặc

g++ -std=c++14 

và tôi muốn giới thiệu để sử dụng cũng -Wall -Wextra -pedantic.

+0

Tôi đang đối mặt với cùng một vấn đề, nhưng cờ '-std = C++ 11' được bật và tất cả tiêu đề bắt buộc được bao gồm. Không thể tìm thấy điều gì sai: https://gist.github.com/canadien91/2ba3f9576823159c2d52 – Montreal

+0

để tham khảo trong tương lai: @Montreal #include Stuck

+0

@Stuck, hmm, trong gist được bao gồm. Nhưng tôi không nhớ bây giờ khi tôi đã thêm này. – Montreal

3

Nếu bạn đang sử dụng Code :: Blocks, đi đến Cài đặt> Compiler> Cài đặt trình biên dịch toàn cầu> Cài đặt trình biên dịch và tìm kiếm các Có g ++ theo C++ 11 ISO C++ chuẩn ngôn ngữ [-std=c++11] và kiểm tra nó!

(Code :: Blocks sẽ thêm -std=c++11 cho bạn khi biên soạn)