2015-02-28 23 views
5

Mã sau đây biên dịch và chạy trong Xcode 5 và trong Visual Studio 2013. Tôi quan tâm đến việc thử Codelite, nhưng Codelite sẽ không biên dịch chương trình sau (một vấn đề kể từ khi tôi làm việc với enums scoped trong dự án của tôi). Theo như tôi hiểu, Codelite đang sử dụng trình biên dịch giống như Xcode.Cách bật tính năng C++ 11 trong Codelite

Mã có hợp lệ cho mỗi C++ 11 không? Tại sao Codelite không thể biên dịch nó?

#include <iostream> 

namespace abc 
{ 
    namespace xyz 
    { 
     enum class SampleEnum 
     { 
      SomeValue = 0, 
      SomeOtherValue = 1 
     }; 
    } 
} 

int main(int argc, char **argv) 
{ 
    abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue; 
    return 0; 
} 

Đây là đầu ra xây dựng từ Codelite. Trong trường hợp nó bị cắt xén, nó trỏ đến từ "SampleEnum" trong sự diễn giải của biến và nói "dự kiến ​​một lớp hoặc không gian tên".

/bin/sh -c 'make -j8 -e -f Makefile' 
----------Building project:[ ClangTest - Debug ]---------- 
codelite-cc /usr/bin/clang++ -c "/Users/xxx/Desktop/Test/ClangTest/main.cpp" -g -O0 -Wall -o ./Debug/main.cpp.o -I. -I. 
/Users/xxx/Desktop/Test/ClangTest/main.cpp:7:8: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions] 
       enum class SampleEnum 
        ^
/Users/xxx/Desktop/Test/ClangTest/main.cpp:17:40: error: expected a class or namespace 
    abc::xyz::SampleEnum e = abc::xyz::SampleEnum::SomeValue; 
          ~~~~~~~~~~^ 
1 warning and 1 error generated. 
make[1]: *** [Debug/main.cpp.o] Error 1 
make: *** [All] Error 2 
2 errors, 1 warnings 
+0

Có vẻ Codelite không thích C++ 11: 'warning: scoped enumerations is C++ 11 mở rộng ' –

+1

Dường như trình biên dịch của bạn không chạy trong chế độ C++ 11, hãy thử thêm công tắc '-std = C++ 11' –

+1

Tôi nghĩ bạn nên đặt Chỉnh sửa làm câu trả lời cho câu hỏi của riêng bạn. Thật vậy nó có thể giúp đỡ một người nào đó trong tương lai, nhưng có thể bỏ qua đọc nó nghĩ rằng đó là một sự tiếp tục của câu hỏi của bạn để thay thế. – CygnusX1

Trả lời

18

Cần phải truyền -std = C++ 11 cho trình biên dịch để bật tính năng C++ 11. Dưới đây là các bước để thực hiện việc này trong Codelite:

  • Nhấp chuột phải vào dự án trong chế độ xem vùng làm việc.
  • Chọn Cài đặt ở gần cuối trình đơn bật lên này. Cài đặt chung-> Trình biên dịch-> Tùy chọn trình biên dịch C++
  • Nhấp vào danh sách phân tách bằng dấu chấm phẩy của các trình chuyển đổi trình biên dịch để hiển thị elipses và nhấp vào elipses.
  • Nhấp vào hộp kiểm cho -std = C++ 11

screenshot of the project settings windows

+0

Chỉ cần một bình luận: CodeLite không "biên dịch" codelite là một IDE, mà gọi trình biên dịch (trong trường hợp của bạn, gcc). Vì vậy, tiêu đề là một chút sai lầm. – Eran

+0

Đây là một cách hoàn hảo/tiêu chuẩn trong CodeLite để gọi hỗ trợ của trình biên dịch cho C++ 11. BTW: rất nhiều tùy chọn của trình biên dịch có thể được chọn ở đây như bạn có thể thấy. – htredleaf

4

Nếu bạn đang sử dụng phần mở rộng C++ 11, trình biên dịch muốn nó được gắn cờ. Không có nó, họ có thể ném cảnh báo và lỗi. Đó là vì một số thay đổi của C++ 11 không tương thích ngược, ví dụ: việc sử dụng auto.

Ví dụ, trong gcc bạn nên có

gcc -std=c++11 

Kiểm tra nếu trình biên dịch của bạn không nên có tham số như tốt!

+0

'--std = C++ 11' cũng hợp lệ – CygnusX1

+1

BTW, bạn có thể nâng cấp trình biên dịch GCC của mình. Phiên bản gần đây là 4.9 –

+0

Điểm tốt, @BasileStarynkevitch. GCC 4.9 cũng hỗ trợ C++ 14, rất hữu ích. –

0

Tôi cho rằng điều này là do phiên bản std mặc định của bạn không phải là C++ 11. Để thay đổi thành C++ 11, nếu bạn đang sử dụng thiết bị đầu cuối của mình, bạn nên nhập vào lệnh sau:

g++ yourfile.cpp -std=c++11 
Các vấn đề liên quan