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:
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 originalstd::map< std::string, int > colores;
colores[ "blanco" ] = 1;
colores[ "negro" ] = 2;
// ...
// 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
int colorInt = colores[ mensaje ];
switch( colorInt )
{
case 1: // Blanco
// ...
case 2: // Negro
// ...
default: // Color desconocido
// ...
}
Un saludo.