Chỉ cần làm
obj.opt=Yes;
Mã này:
obj.opt="Yes";
cố gắng gán một chuỗi chữ (một loại hoàn toàn khác nhau) để một kiểu enum, mà C++ không Automagically chuyển đổi cho bạn.
Làm cách nào có thể gán const char * để chọn?
Bạn sẽ phải làm điều này bằng tay, tôi muốn giữ một tập hợp các chức năng miễn phí xung quanh để thực hiện chuyển đổi như thế này với sự đếm của tôi, tức là tôi sẽ quấn enums của tôi trong một không gian tên và cung cấp một số chức năng để làm việc với họ:
namespace options
{
enum Enum {Yes,No,Invalid};
Enum FromString(const std::string& str);
// might also add ToString, ToInt, FromInt to help with conversions
}
Enum FromString(const std::string& str)
{
if (str == "Yes")
{
return Yes
}
else if (str == "No")
{
return No;
}
return Invalid; //optionally throw exception
}
Bây giờ bạn có thể làm:
class A{
int i;
string str;
options::Enum opt; // notice change here
};
...
obj.opt=options::FromString("Yes");
Vì vậy, bạn có thể thấy, sự đếm trong C++ có lẽ không cung cấp cho bạn tất cả các chuông và còi của sự đếm bằng các ngôn ngữ khác. Bạn sẽ phải tự mình chuyển đổi mọi thứ.
Nguồn
2011-05-09 14:11:07
Tôi cũng cung cấp các hàm chuyển đổi từ/sang chuỗi (trên thực tế, tôi đã bao bọc việc tạo enum trong macro chỉ để chúng được cung cấp mọi lúc), nó dễ đọc hơn trong nhật ký gỡ lỗi và chuyển tham số (để được phân tích cú pháp). –