Làm cách nào để kích hoạt C ++ 11 trong Eclipse Juno / Kepler / Luna CDT?


85

CHỈNH SỬA: Hóa ra điều này thực sự không dành riêng cho Eclipse Kepler. Tôi đã phải sử dụng cùng một quy trình cho Eclipse Juno. Vấn đề là dường như còn thiếu các bước trong các bài đăng khác trả lời câu hỏi tương tự này.

Tôi đang sử dụng Eclipse Kepler cho C ++ và tôi đang cố gắng sử dụng C ++ 11 và gặp lỗi. Khi tôi biên dịch, tôi gặp lỗi

lỗi: vòng lặp dựa trên phạm vi không được phép trong chế độ C ++ 98

Tôi đã làm theo hướng dẫn từ bài đăng

Hỗ trợ Eclipse CDT C ++ 11 / C ++ 0x

và giải pháp được đưa ra cho Eclipse Juno không hoạt động.

Các ý kiến ​​khác nhau đã đề xuất khởi động lại nhật thực và làm sạch và xây dựng lại. Điều đó không tạo ra sự khác biệt.

Câu trả lời:


183

Có hai việc bạn phải làm, trước tiên bạn cần thiết lập trình biên dịch của mình, sau đó bạn cần thiết lập trình xử lý ngôn ngữ của CDT. Vì bạn không đề cập đến trình biên dịch nào bạn đang sử dụng, tôi sẽ cho rằng đó là GCC nhưng các bước sẽ tương tự đối với các trình biên dịch khác. (Lưu ý rằng bạn cần một trình biên dịch hỗ trợ C ++ 11, tất nhiên.)

Thiết lập trình biên dịch khá đơn giản:

  1. Nhấp chuột phải vào dự án của bạn và nhấp vào Thuộc tính
  2. Trong C / C ++ Build, nhấp vào Cài đặt
  3. Trong Trình biên dịch GCC C ++, nhấp vào Khác
  4. Trong hộp Cờ khác, nối "-std = c ++ 11" vào danh sách mã thông báo.
  5. Nhấp vào Áp dụng và OK

Tại thời điểm này, bạn sẽ có thể xây dựng lại dự án của mình và bắt đầu chạy. Nhưng CDT vẫn có thể hiển thị lỗi cho C ++ 11 bao gồm. Đây là cách bạn có thể giải quyết điều đó:

  1. Nhấp chuột phải vào dự án của bạn và nhấp vào Thuộc tính
  2. Trong C / C ++ Nhấp vào Chung "Bộ tiền xử lý Bao gồm Đường dẫn, Macro"
  3. Chọn tab Nhà cung cấp
  4. Sẽ có một mục trong danh sách có nội dung như "Cài đặt trình biên dịch tích hợp GCC". Chọn mục này.
  5. Bỏ chọn tùy chọn "Sử dụng nhà cung cấp toàn cầu ..."
  6. Dưới danh sách có một hộp cho biết "Lệnh để nhận thông số kỹ thuật của trình biên dịch." Nối "-std = c ++ 0x" vào đây.
  7. Di chuyển nhà cung cấp "Cài đặt trình biên dịch tích hợp GCC" ở đầu danh sách bằng cách sử dụng nút 'Di chuyển lên' ở bên phải.
  8. Nhấp vào Áp dụng và sau đó nhấp vào OK.
  9. Quay lại không gian làm việc Eclipse của bạn, chọn Menu Dự án, Chỉ mục C / C ++ và nhấp vào "Giải quyết lại các phần chưa được giải quyết."

1
Cảm ơn bạn. Điều này đã hiệu quả. Có thể tôi đã đọc nhầm bài đăng khác mà tôi đã liên kết đến, nhưng có vẻ như không có đề cập đến việc thiết lập trình biên dịch trong bài đăng đó.
user327301

1
Không hiệu quả với tôi. Vấn đề chính của tôi là bao gồm c ++ 11 chưa được giải quyết. Tôi đặt -std=c++11ở nơi bạn nói đặt, và xây dựng lại các chỉ số đầy đủ, vẫn cho thấy một crapload của không được công nhận std :: cout, std :: set, vv ...
Dolanor

2
CHỈNH SỬA: Tôi không tìm thấy phần đầu tiên ở đâu, nhưng tôi đang biên dịch thông qua thực hiện, vì vậy nó có thể là một lời giải thích. (Tôi đã tìm thấy nó trong cấu hình không gian làm việc và đặt nó). Nhưng tôi đã đặt nó vào compiler spec, và vẫn không hoạt động. std :: shared_ptr và cùng không được công nhận. Mặc dù nó đã từng hoạt động trên máy cũ hơn với juno.
Dolanor,

1
Trong trường hợp của tôi (gcc), tôi đã sử dụng -std = c ++ 0x. Vì vậy, mọi thứ đang hoạt động. Cảm ơn bạn!
Denis Zaikin

4
@MrEricSir có cách nào để tạo cài đặt này cho không gian làm việc để khi tôi thêm một dự án mới, nó cũng tự động được áp dụng cho nó không?
Ivaylo Strandjev

25

Hỗ trợ C ++ 11 trong Eclipse Kepler Service Release 1 (Id bản dựng: 20130919-0819)

Trong phiên bản mới nhất Eclipse Kepler SR1, bạn chỉ phải thêm -std = c ++ 11

  1. Nhấp chuột phải vào dự án của bạn và nhấp vào Thuộc tính
  2. Điều hướng đến C / C ++ ChungBộ tiền xử lý Bao gồm Đường dẫn, Macro, v.v.
  3. Chọn tab Nhà cung cấp
  4. Thêm -std = c ++ 11 vào Lệnh để nhận thông số kỹ thuật của trình biên dịch:
  5. Áp dụng các thay đổi, Chỉ mục sẽ được tạo tự động.

Dòng "Command to get compiler specs:" sẽ giống như sau:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11

2
Với GCC tôi đã có thêm -std = c ++ 0x
ccook

Bạn sử dụng GCC nào? c ++ 0X là tên cũ (bí danh) cho C ++ 11
MeJ

1
Tìm thấy đây là lần thứ hai thiết lập CDT nhật thực mới - việc thiết lập này sẽ trực quan hơn.
ccook


6

Tôi sử dụng Eclipse Kepler và để sửa nó, tôi đã làm như sau:

1 - Nhấp chuột phải vào Dự án >> Proprietes >> C / C ++ Build :: Settings

2 - Đã đến trình biên dịch GCC G ++ >> Khác >> Cờ khác

 i then added -std=c++11 
 hit apply and ok

Điều đó đã khắc phục sự cố của tôi!

Tôi hy vọng nó đã giúp!


Đây là câu trả lời tốt nhất cho Nền tảng Eclipse, Phiên bản: 4.3.1 - Không biết Kepler / Juno là gì!
TCSGrad

Eclipse Kepler là Phiên bản Eclipse 4.3.X
Karrq

4

Chạy chàm Eclipse và cdt 8.0.2 tại đây. Tôi đã làm theo tất cả các hướng dẫn, nhưng vẫn cần thiết lập trình xác định tiền xử lý bằng tay để tìm những thứ như std :: unique_ptr. Tập tin bao gồm "bộ nhớ" kiểm tra điều này. Đặt __cplusplus thành 201103L trên tab "Biểu tượng" trong "Đường dẫn và biểu tượng" trong "C ++ Chung" trong thuộc tính dự án.


Có, Hoạt động để di chuyển từ các dự án cũ.
Guy L

2

Thêm cờ phương ngữ "-std = c ++ 11" vào Thuộc tính dự án-> C / C ++ Xây dựng -> Cài đặt -> Cài đặt công cụ (GCC C ++ Compiler -> Dialect) đã giải quyết được vấn đề của tôi trong Eclipse Kepler, ngoài các cài đặt đã nêu ở trên.


1

Tôi đang sử dụng Eclipse Luna và không có "Cài đặt công cụ" trong C / C ++ Build -> Settings. Tôi DID thêm -std = c ++ 11 vào dòng lệnh thông số kỹ thuật của trình biên dịch trong "C / C ++ Chung -> Bao gồm tiền xử lý -> Nhà cung cấp" như được đề xuất. Nhưng điều đó vẫn không đáp ứng khả năng giải quyết emplace () của trình chỉ mục của tôi.

Vì vậy, tôi đã tìm trong tệp tiêu đề cho và thấy rằng các hàm emplace phụ thuộc vào __cplusplus> = 201103L. Vì vậy, tôi chỉ cần thêm ký hiệu tiền xử lý "__cplusplus" và đặt cho nó giá trị 201103.

Kinda hackish nhưng người lập chỉ mục rất vui. (Và các tệp makefiles xác định cờ xây dựng của tôi, không phải dự án nhật thực)


0

Giải pháp do MrEricSir cung cấp chỉ hoạt động sau khi cài đặt Eclipse Oxygen CDT mới nhất. Nó không hoạt động với tôi với Mars CDT.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.