Eso sí,
obj.opt=Yes;
este código:
obj.opt="Yes";
trata de asignar una cadena literal (un tipo completamente diferente) a un tipo de enumeración, que C++ no convierte automagicamente para usted.
¿Cómo se puede asignar const char * to opt?
Vas a tener que hacerlo manualmente, me gusta mantener un conjunto de funciones gratuitas en todo para hacer las conversiones de este tipo con mis enumeraciones, es decir, voy a envolver mis enumeraciones en un espacio de nombres y proporcionar algunas funciones para trabajar con ellos:
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
}
Ahora se puede hacer:
class A{
int i;
string str;
options::Enum opt; // notice change here
};
...
obj.opt=options::FromString("Yes");
Así se puede ver, las enumeraciones en C++, probablemente no le dará todas las campanas y silbidos de las enumeraciones en otros idiomas. Tendrá que convertir las cosas manualmente usted mismo.
También proporciono las funciones de conversión de/a cadena (de hecho, envolví la creación enum en una macro solo para que se proporcionen todo el tiempo), simplemente es más fácil de leer en los registros de depuración y pasar como parámetros (para ser analizados). –