2012-04-05 38 views
44

Tôi đang chạy Trình trợ giúp Eclipse và tôi đã cài đặt g ++ - 4.6. Hy vọng tôi không sai rằng g ++ 4.6 triển khai các tính năng của C++ 11. Tôi đã tạo một dự án C++ sử dụng các từ khóa nullptr và auto. Công trình cung cấp các lỗi sau: -Lỗi C++ 'nullptr không được khai báo trong phạm vi này' trong Eclipse IDE

../{filename}.cpp:13:13: error: ‘nullptr’ was not declared in this scope 

../{filename}.cpp:14:2: warning: ‘auto’ will change meaning in C++0x; please remove it [-Wc++0x-compat] 

Thực ra nó đã được xây dựng tốt cho đến ngày hôm qua. Tôi nhận được những thứ này từ hư không ngày nay. Xin hãy giúp tôi giải quyết vấn đề này.

+0

Phiên bản chính xác của g ++ và tùy chọn biên dịch nào bạn đang sử dụng? –

+1

Vui lòng đăng một mẫu mã thể hiện hành vi này, mà không có chúng tôi đang cố gắng đọc lá trà ở đây. –

+0

Tôi đang sử dụng g ++ 4.6 và tưởng tượng các dòng mã như sau: - int * ptr = nullptr; tự động x = 123; –

Trả lời

16

Cuối cùng đã tìm ra điều cần làm. Đã thêm đối số biên dịch -std = C++ 0x trong Thuộc tính dự án -> C/C++ Build -> Cài đặt -> Trình biên dịch GCC C++ -> Khác. Nó hoạt dộng bây giờ!

Nhưng cách thêm cờ này theo mặc định cho tất cả các dự án C++? Có ai không?

+0

Bạn đã xem Cửa sổ -> Tùy chọn -> C/C++ -> Xây dựng -> Cài đặt? – josephthomas

+1

Tôi không có tùy chọn này đáng buồn. – user592748

+0

Tôi xử lý tình huống này bằng cmake như thế nào? – UserK

4

Đó có phải là lỗi trình biên dịch thực sự hoặc lỗi Phân tích mã không? Một số lần phân tích mã có thể hơi sơ sài và báo cáo lỗi không hợp lệ.

Để tắt phân tích mã cho dự án, nhấp chuột phải vào dự án của bạn trong Project Explorer, nhấp vào Thuộc tính, sau đó chuyển đến tab Chung C/C++, sau đó phân tích mã. Sau đó bấm vào "Sử dụng Cài đặt Dự án" và vô hiệu hóa những cái mà bạn không muốn.

Ngoài ra, bạn có chắc là bạn đang biên dịch với trình biên dịch C++ 11 không?

+2

Được thăng hạng để chống lại downvote. Điều này gần như chắc chắn là vấn đề. –

+0

Cảm ơn bạn. Tôi đã gặp phải vấn đề này nhiều lần, vì vậy tôi nghĩ nó đáng nói đến. – josephthomas

+0

Tôi không thấy mục phân tích mã trong tab Chung C/C++ trong thuộc tính dự án Eclipse của tôi. Tôi đang sử dụng g ++ 4.6. Hy vọng rằng thực hiện C++ 11 tính năng, cụ thể nullptr và tự động. Cảm ơn. –

43

Theo GCC page for C++11:

Để kích hoạt tính C++ 0x hỗ trợ, thêm tham số dòng lệnh -std = C++ 0x để g dòng lệnh ++ của bạn. Hoặc, để kích hoạt phần mở rộng GNU ngoài các phần mở rộng C++ 0x, hãy thêm -std = gnu ++ 0x vào dòng lệnh g ++ của bạn. GCC 4.7 và sau đó hỗ trợ -std = C++ 11 và -std = gnu ++ 11.

Bạn đã biên dịch với -std=gnu++0x?

+2

Tôi đã thử thêm tham số dòng lệnh -std = gnu ++ 0x và -std = C++ 0x nhưng gặp vấn đề tương tự. Tôi đã thêm nó trong Thuộc tính dự án -> Xây dựng C/C++ -> Tùy chọn khám phá -> Đối số yêu cầu trình biên dịch. Đó có phải là nơi thích hợp không? –

+0

Có lẽ, nhưng có vẻ như câu trả lời khác là căn bản hơn trong thực tế. :) –

+0

Xin chào Rob, tôi đã nhận thấy một điều ngay bây giờ. IDE không nhận đối số trình biên dịch -std = C++ 0x mặc dù tôi đã thêm nó trong thuộc tính Project -> C/C++ Build -> Discovery Options -> Compiler Invocation Arguments. Vì vậy, tôi đã thử dòng lệnh xây dựng 'g ++' ../CPP.cpp "-std = gnu ++ 0x -std = C++ 0x 'trong một thiết bị đầu cuối và nó biên dịch tốt; tạo nhị phân, chạy thành công. Vì vậy, IDE không xem xét tùy chọn trình biên dịch được chỉ định. Makefile được tạo ra không chịu đối số trình biên dịch -std = C++ 0x. Không chắc chắn làm thế nào để lực lượng IDE để xem xét các đối số biên dịch cung cấp! –

0

Bạn đang sử dụng g ++ 4.6 phiên bản bạn phải gọi -std flag = C++ 0x để biên dịch

g ++ -std = C++ 0x * .cpp -o đầu ra

3

vào Settings -> Compiler ... Và thêm cờ để "Have g ++ theo đến C++ 0x ISO C++ ngôn ngữ tiêu chuẩn [std = C++ 0x]

0

tôi thêm", -std = C++ 0x "sau" -c -fmessage-length = 0 ", trong Thuộc tính dự án -> C/C++ Build -> Cài đặt -> Trình biên dịch GCC C++ -> Khác. Đừng quên thêm dấu phẩy "," làm seperator.

0

Thử với phiên bản gcc khác có hiệu quả với tôi - gcc 4.9 trong trường hợp của tôi.

Các vấn đề liên quan