Programación General > C/C++
c++ enum en un constructor
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
[#] Página Siguiente
Ir a la versión completa