Tôi có tuyên bố sau đây của một số thành viên const tĩnhthành viên const Tại sao tĩnh không thể xuất hiện trong một biểu thức hằng như 'tắc'
.h
class MyClass : public MyBase
{
public:
static const unsigned char sInvalid;
static const unsigned char sOutside;
static const unsigned char sInside;
//(41 more ...)
}
cpp
const unsigned char MyClass::sInvalid = 0;
const unsigned char MyClass::sOutside = 1;
const unsigned char MyClass::sInside = 2;
//and so on
Tại một số điểm tôi muốn sử dụng những giá trị đó trong một công tắc như:
unsigned char value;
...
switch(value) {
case MyClass::sInvalid : /*Do some ;*/ break;
case MyClass::sOutside : /*Do some ;*/ break;
...
}
Nhưng tôi nhận được lỗi trình biên dịch sau: lỗi: 'MyClass :: sInvalid' không thể xuất hiện trong biểu thức hằng số.
Tôi đã đọc các công cụ chuyển đổi không thể xuất hiện liên tục khác và không tìm thấy câu trả lời cho tôi vì tôi không hiểu lý do tại sao những người đó static const unsigned char
không phải là biểu thức liên tục.
Tôi đang sử dụng gcc 4.5.
-1'd do nhầm lẫn. Bạn nên xác định rằng việc khởi tạo nên được ** bên trong ** định nghĩa lớp, không chỉ là tiêu đề.Nếu bạn khởi tạo chúng trong tiêu đề, nhưng bên ngoài lớp, bạn sẽ nhận được các lỗi liên kết. –
@LuchianGrigore: OK, tôi đã nói rõ điều đó. – jpalecek
+1 cho một giải pháp hợp lệ, nhưng tôi vẫn điều enum là tốt hơn ở đây. –