Programación General > C/C++

 c++ enum en un constructor

(1/2) > >>

samu_dnet:
Hola, ya suponia que esto generaria un error:

--- Código: C++ ---#include <iostream>#include <string> using namespace std; class carta{private:   char simbolo;  enum valores{as,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez,jota,cu,ka};  enum palos{picas,corazones,treboles,rombos};  valores valor;  palos palo;public:    carta(char Simbolo,valores Valor,palos Palo)  {    simbolo = Simbolo;    valor = Valor;    palo = Palo;  }};  int main()  {    carta Carta('a',dos,treboles);    return 0;  } este error:

--- Código: Text ---lnx@lnx-laptop:~/c++$ c++ pruebas.cc -o a.binpruebas.cc:11: error: ‘valores’ no nombra a un tipopruebas.cc:12: error: ‘palos’ no nombra a un tipopruebas.cc: In constructor ‘carta::carta(char, carta::valores, carta::palos)’:pruebas.cc:20: error: ‘valor’ no se declaró en este ámbitopruebas.cc:21: error: ‘palo’ no se declaró en este ámbitopruebas.cc: In function ‘int main()’:pruebas.cc:27: error: ‘dos’ no se declaró en este ámbitopruebas.cc:27: error: ‘picas’ no se declaró en este ámbitolnx@lnx-laptop:~/c++$ c++ pruebas.cc -o a.binpruebas.cc:11: error: ‘valores’ no nombra a un tipopruebas.cc:12: error: ‘palos’ no nombra a un tipopruebas.cc: In constructor ‘carta::carta(char, carta::valores, carta::palos)’:pruebas.cc:20: error: ‘valor’ no se declaró en este ámbitopruebas.cc:21: error: ‘palo’ no se declaró en este ámbitolnx@lnx-laptop:~/c++$ c++ pruebas.cc -o a.binlnx@lnx-laptop:~/c++$ c++ pruebas.cc -o a.binpruebas.cc: In function ‘int main()’:pruebas.cc:25: error: ‘dos’ no se declaró en este ámbitopruebas.cc:25: error: ‘treboles’ no se declaró en este ámbito  
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:
Si los enum's fueran publicos podrias hacer esto:

--- Código: C++ ---carta Carta('a',carta::dos, carta::treboles); 

samu_dnet:
PERFECTO!! Muchas GRACIAS!

Eternal Idol:
De  nadas  :beer:

samu_dnet:
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++ ---#include <iostream>#include <string> using namespace std; class carta;   int main()  {    carta micarta1;    micarta1 = new carta(carta::as, carta::rombos);    micarta1.mostrar();    return 0;  }//////////////////  C A R T A ///////////////////////////////////////////////class carta{  //Variables y tipos propiospublic:  enum valores{as,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez,sota,reina,rei};  enum palos{picas,corazones,treboles,rombos};  valores valor;  palos palo;  bool ex;   //Mostrar en Consola  void mostrar()  {    cout << endl << valores(valor)<<endl<<palos(palo)<<endl;  }    //Constructor  carta(valores Valor,palos Palo)  {    valor = Valor;    palo = Palo;    ex = false;  } }; 
Y este es el error:

--- Código: Text ---pruebas.cc: In function ‘int main()’:pruebas.cc:10: error: el agregado ‘carta micarta1’ tiene un tipo incompleto y no se puede definirpruebas.cc:11: error: se utilizó el tipo incompleto ‘carta’ en un especificador de nombre anidadopruebas.cc:11: error: se utilizó el tipo incompleto ‘carta’ en un especificador de nombre anidadopruebas.cc:11: error: invalid use of incomplete type ‘struct carta’pruebas.cc:6: error: forward declaration of ‘struct carta’  
normalmente investigo yo el porque, pero que carajo significa anidado??? xD.

Gracias por la ayuda ante todo.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa