SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: AriesDARK en Domingo 16 de Noviembre de 2008, 13:23

Título: Necesito abusar de sus conocimientos
Publicado por: AriesDARK en Domingo 16 de Noviembre de 2008, 13:23
Antes que nada presentarme, soy argentino, me llamo Daniel, y hace muy poco que estoy tratando de aprender C++.

Estoy leyendo un curso de C++, y para probar las constantes enumeradas se me ocurrió probar con este código y me tira muchos errores en la compilación:

“error C2679: '>>' binario : no se encontró un operador que adopte un operando en la parte derecha de tipo 'main::Meses' (o bien no existe una conversión aceptable)”

todos son iguales (creo),  supongo que no coinciden los tipos de las variables, probé de varias formas pero no entiendo cual es el problema.

Acá les dejo el código:


#include <iostream>
   int main()
   {
      enum Meses { Enero, Febrero, Marzo, Abril, Mayo,
               Junio, Julio, Agosto, Septiembre, Octubre,
            Noviembre, Diciembre };

      Meses ahora;
      std::cout << "en que mes estamos"<< std::endl;
      std::cin >> ahora;
     
      if (ahora == 0 || ahora == 1 || ahora == 2 || ahora == 3 || ahora == 4 || ahora == 5)
      {
         if (ahora == 1 || ahora == 2 || ahora == 0)
         std::cout << "nEstamos en Verano.n";
         else
         std::cout << "nEstamos en Otoño.n";
      }
      else
      {
         if (ahora == 6 || ahora == 7 || ahora == 8)
         std::cout << "nEstamos en Invierno.n";
         else
          std::cout << "nEstamos en Primavera.n";
      }
      return 0;
  }

Solo quisiera saber cual es el problema no como solucionarlo, osea en que me estoy equivocando.


Desde ya muchas gracias, Daniel
Título: Re: Necesito abusar de sus conocimientos
Publicado por: ProfesorX en Lunes 17 de Noviembre de 2008, 03:14
El error esta en la forma que usas el enum, las enumeraciones equivalen a numeros enteros, y no a cadenas, y son mas que nada para ayudar en la legbilidad del codigo. Asi que lo que deberias haces es definir tu variable ahora de tipo entero, y usar la enumeracion en los if, en lugar de los numeros. Ejemplo:

Código: C++
  1.  
  2.     int ahora;
  3.     std::cout << "en que mes estamos"<< std::endl;
  4.     std::cin >> ahora;
  5.  
  6.    
  7.     // Si pones un cero en la variable ahora, imprimira el mensaje de enero
  8.     if (ahora == Enero )
  9.         std::cout << "Este es el mes de enero"<<std::endl;
  10.  
  11.  

Aunque supongo que no era lo que querias. Me parece que lo que querias era utilizar cadenas para comparar, en cuyo caso, se haria de otra forma, utilizando un arreglo de char, o un string, y no un enum.

Saludos :hola:
Título: Re: Necesito abusar de sus conocimientos
Publicado por: AriesDARK en Martes 18 de Noviembre de 2008, 10:25
Mil gracias por la respuesta ProfesorX.

Ya la hice integer a ahora y anduvo el programa, lo que yo pretendía del programa era que puedas escribir tanto en letras como indicar el número de mes, y suponía que si la declaraba con el tipo del enum que había creado (meses) funcionaria.

Bueno muchas gracias nuevamente por tu respuesta.
Título: Re: Necesito abusar de sus conocimientos
Publicado por: m0skit0 en Martes 18 de Noviembre de 2008, 10:45
Fíjate que también puedes usar >= y <= para tus condiciones, en vez de comparar todos los números. Saludos.