• Viernes 1 de Noviembre de 2024, 02:27

Autor Tema:  Necesito abusar de sus conocimientos  (Leído 2147 veces)

AriesDARK

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Necesito abusar de sus conocimientos
« en: Domingo 16 de Noviembre de 2008, 13:23 »
0
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

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Necesito abusar de sus conocimientos
« Respuesta #1 en: Lunes 17 de Noviembre de 2008, 03:14 »
0
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:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

AriesDARK

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Necesito abusar de sus conocimientos
« Respuesta #2 en: Martes 18 de Noviembre de 2008, 10:25 »
0
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.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Necesito abusar de sus conocimientos
« Respuesta #3 en: Martes 18 de Noviembre de 2008, 10:45 »
0
Fíjate que también puedes usar >= y <= para tus condiciones, en vez de comparar todos los números. Saludos.