Просто выполните
obj.opt=Yes;
Этот код:
obj.opt="Yes";
пытается присвоить строковый литерал (совершенно другой тип) типу перечисления, который C ++ не выполняет автоматическое преобразованиедля вас.
Как можно присвоить const char * для opt?
Вам придется делать это вручную, я хотел бы сохранить набор бесплатных функций длявыполняя подобные преобразования с моими перечислениями, то есть я заверну свои перечисления в пространство имен и предоставлю некоторые функции для работы с ними:
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
}
Теперь вы можете сделать:
class A{
int i;
string str;
options::Enum opt; // notice change here
};
...
obj.opt=options::FromString("Yes");
Итак, вы можете видеть, что перечисления в C ++, вероятно, не дают вам всех наворотов перечислений в других языках.Вам придется самостоятельно конвертировать вещи.