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
Có vẻ Codelite không thích C++ 11: 'warning: scoped enumerations is C++ 11 mở rộng ' –
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' –
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