• Viernes 8 de Noviembre de 2024, 21:41

Autor Tema:  c++ enum en un constructor  (Leído 2551 veces)

samu_dnet

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
c++ enum en un constructor
« en: Jueves 10 de Septiembre de 2009, 20:48 »
0
Hola, ya suponia que esto generaria un error:
Código: C++
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. class carta
  7. {
  8. private:
  9.  
  10.   char simbolo;
  11.   enum valores{as,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez,jota,cu,ka};
  12.   enum palos{picas,corazones,treboles,rombos};
  13.   valores valor;
  14.   palos palo;
  15. public:
  16.     carta(char Simbolo,valores Valor,palos Palo)
  17.   {
  18.     simbolo = Simbolo;
  19.     valor = Valor;
  20.     palo = Palo;
  21.   }
  22. };
  23.   int main()
  24.   {
  25.     carta Carta('a',dos,treboles);
  26.     return 0;
  27.   }
  28.  
este error:
Código: Text
  1. lnx@lnx-laptop:~/c++$ c++ pruebas.cc -o a.bin
  2. pruebas.cc:11: error: ‘valores’ no nombra a un tipo
  3. pruebas.cc:12: error: ‘palos’ no nombra a un tipo
  4. pruebas.cc: In constructor ‘carta::carta(char, carta::valores, carta::palos)’:
  5. pruebas.cc:20: error: ‘valor’ no se declaró en este ámbito
  6. pruebas.cc:21: error: ‘palo’ no se declaró en este ámbito
  7. pruebas.cc: In function ‘int main()’:
  8. pruebas.cc:27: error: ‘dos’ no se declaró en este ámbito
  9. pruebas.cc:27: error: ‘picas’ no se declaró en este ámbito
  10. lnx@lnx-laptop:~/c++$ c++ pruebas.cc -o a.bin
  11. pruebas.cc:11: error: ‘valores’ no nombra a un tipo
  12. pruebas.cc:12: error: ‘palos’ no nombra a un tipo
  13. pruebas.cc: In constructor ‘carta::carta(char, carta::valores, carta::palos)’:
  14. pruebas.cc:20: error: ‘valor’ no se declaró en este ámbito
  15. pruebas.cc:21: error: ‘palo’ no se declaró en este ámbito
  16. lnx@lnx-laptop:~/c++$ c++ pruebas.cc -o a.bin
  17. lnx@lnx-laptop:~/c++$ c++ pruebas.cc -o a.bin
  18. pruebas.cc: In function ‘int main()’:
  19. pruebas.cc:25: error: ‘dos’ no se declaró en este ámbito
  20. pruebas.cc:25: error: ‘treboles’ no se declaró en este ámbito
  21.  
  22.  

ya supongo que los enum estan dentro de la clase y no existen en main, vamos que es imposible hacerlo asi, pero,
Como podria hacerlo??? algo parecido??

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: c++ enum en un constructor
« Respuesta #1 en: Viernes 11 de Septiembre de 2009, 12:02 »
0
Si los enum's fueran publicos podrias hacer esto:
Código: C++
  1. carta Carta('a',carta::dos, carta::treboles);
  2.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

samu_dnet

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: c++ enum en un constructor
« Respuesta #2 en: Viernes 11 de Septiembre de 2009, 14:49 »
0
PERFECTO!! Muchas GRACIAS!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: c++ enum en un constructor
« Respuesta #3 en: Viernes 11 de Septiembre de 2009, 17:24 »
0
De  nadas  :beer:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

samu_dnet

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: c++ enum en un constructor
« Respuesta #4 en: Sábado 12 de Septiembre de 2009, 01:43 »
0
T_T acabo de hacer unos cambios, y me lanza error, al parecer no me funciona, aunque lo he hecho todo mucho mas sencillo:
Código: C++
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. class carta;
  7.  
  8.   int main()
  9.   {
  10.     carta micarta1;
  11.     micarta1 = new carta(carta::as, carta::rombos);
  12.     micarta1.mostrar();
  13.     return 0;
  14.   }
  15. //////////////////  C A R T A ///////////////////////////////////////////////
  16. class carta
  17. {
  18.   //Variables y tipos propios
  19. public:
  20.   enum valores{as,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez,sota,reina,rei};
  21.   enum palos{picas,corazones,treboles,rombos};
  22.   valores valor;
  23.   palos palo;
  24.   bool ex;
  25.  
  26.   //Mostrar en Consola
  27.   void mostrar()
  28.   {
  29.     cout << endl << valores(valor)<<endl<<palos(palo)<<endl;
  30.   }
  31.  
  32.   //Constructor
  33.   carta(valores Valor,palos Palo)
  34.   {
  35.     valor = Valor;
  36.     palo = Palo;
  37.     ex = false;
  38.   }
  39.  
  40. };
  41.  

Y este es el error:
Código: Text
  1. pruebas.cc: In function ‘int main()’:
  2. pruebas.cc:10: error: el agregado ‘carta micarta1’ tiene un tipo incompleto y no se puede definir
  3. pruebas.cc:11: error: se utilizó el tipo incompleto ‘carta’ en un especificador de nombre anidado
  4. pruebas.cc:11: error: se utilizó el tipo incompleto ‘carta’ en un especificador de nombre anidado
  5. pruebas.cc:11: error: invalid use of incomplete type ‘struct carta’
  6. pruebas.cc:6: error: forward declaration of ‘struct carta’
  7.  
  8.  

normalmente investigo yo el porque, pero que carajo significa anidado??? xD.

Gracias por la ayuda ante todo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: c++ enum en un constructor
« Respuesta #5 en: Sábado 12 de Septiembre de 2009, 08:59 »
0
¿Para que pusiste el main antes? Si simplemente ponias public: antes de los enums con carta:: adelante de los enumerandos (?) funcionaba ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.