Ver Mensaje Individual
  #2 (permalink)  
Antiguo 16/04/2015, 00:39
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Duda con Switch - Case

Buenos días.

Si el código que os ha puesto no es más que un ejemplo que tenéis que adaptar para conseguir que funcione puedo decirte que es un poco inutil:

Código C++:
Ver original
  1. case 'Blanco':

Para empezar, las comillas simples sirven, única y exclusivamente, con caracteres sueltos como 'c', 'a', 'X', pero nunca para cadenas de texto. Éstas tienen que ir encerradas con comillas dobles: "Blanco".

El segundo error que tiene esa línea (así como todos los case) es que un case únicamente puede hacer comparaciones con tipos nativos no punteros (bool, int, float, double, char). Y, le pese a quien le pese, la clase "string" no es un tipo nativo de C++, por lo que no puedes usarlo para estos menesteres.

Para salir airoso de una situación así tienes dos opciones:

* Sustituir el switch por una secuencia de if ... else if ... else if ...

* Asignar un índice a cada color: Blanco -> 1, Negro -> 2, ... y usas ese indice en los case. La conversión la puedes hacer de diferentes maneras, pero para no solapar esta solución con la anterior puedes usar un vector o un mapa:

Código C++:
Ver original
  1. std::map< std::string, int > colores;
  2. colores[ "blanco" ] = 1;
  3. colores[ "negro" ] = 2;
  4.  
  5. // ...
  6.  
  7. // A "colores" le estamos pidiendo el valor asignado a la clave. La clave es el color y el valor es el índice asignado a dicho color
  8. int colorInt = colores[ mensaje ];
  9. switch( colorInt )
  10. {
  11.   case 1: // Blanco
  12.     // ...
  13.   case 2: // Negro
  14.     // ...
  15.   default: // Color desconocido
  16.     // ...
  17. }

Un saludo.