enum options {Yes,No};

class A{
    int i;
    string str;
    options opt;
};


int main{
    A obj;
    obj.i=5;
    obj.str="fine";
    obj.opt="Yes"; //compiler error
}

Cómo puede asignar const char * para optar?

OriginalEl autor thetux4 | 2011-05-09

6 Comentarios

  1. 13

    Acaba de hacer

       obj.opt=Yes;

    Este código:

       obj.opt="Yes";

    intenta asignar un literal de cadena (un tipo completamente diferente) a un tipo de enumeración, que C++ no automágicamente convertir para usted.

    Cómo puede asignar const char * opt?

    Tendrás que hacerlo manualmente, me gusta mantener un conjunto de funciones libres de todo para hacer conversiones, como este con mi enumeraciones, es decir, me voy a envolver mi 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 usted puede hacer:

     class A{
       int i;
       string str;
       options::Enum opt; //notice change here
     };
    
     ...
    
    
    obj.opt=options::FromString("Yes");

    Así que usted puede ver, las enumeraciones en C++ probablemente no te dan todas las campanas y silbidos de las enumeraciones en otros idiomas. Usted tendrá que convertir manualmente las cosas uno mismo.

    Me ofrecen la de/a cadena de funciones de conversión (de hecho me he envuelto la enumeración creación de una macro sólo para que ellos se proporcionan todos los tiempos), simplemente es más fácil de leer en los registros de depuración y pasar como parámetros (para ser analizado).

    OriginalEl autor Doug T.

  2. 3

    Las enumeraciones no son cadenas de caracteres, pero sólo valores

    obj.opt = Yes;

    OriginalEl autor Bo Persson

  3. 3

    Porque un valor de enumeración no es una cadena. Esto es correcto :

    int main{
        A obj;
    
        obj.opt=Yes;
    }

    OriginalEl autor BЈовић

  4. 1

    Usted no puede hacer esto. Usted tendrá que utilizar algunas de las comparaciones de cadenas y configuración.

    OriginalEl autor Daniel A. White

  5. 1

    En su caso, usted puede «convertir» enum para const char*. Todo lo que usted necesita es crear macro.
    Por ejemplo:
    #define ENUM_TO_CSTR(x) #x
    y luego:
    obj.opt=ENUM_TO_CSTR(Yes).

    Esta macro se va a convertir todo lo que pasa en el C-como string. No convertir el valor de la variable, sino sólo su nombre!

    int x = 10; cout << ENUM_TO_CSTR(x) << endl;

    Imprimirá x (no 10) en la pantalla, así que ten cuidado!

    OriginalEl autor mani3xis

  6. 1

    Cuando intenta asignar el «Sí» significa que usted está intentando asignar un valor de cadena y no la enumeración constante a partir de la enumeración de las opciones. En lugar de usar la sintaxis:

        obj.opt = Yes;

    Trate de imprimir el valor de optar por obj:

        cout << obj.opt;

    Obtendrá la salida como 0, ya que la enumeración de los índices de empezar desde 0. Sí es 0 y No es 1.

    OriginalEl autor Swapnil B.

Dejar respuesta

Please enter your comment!
Please enter your name here