Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





enum en Xcode (c++)

Iniciado por dari, 20 de Agosto de 2011, 05:47:46 PM

« anterior - próximo »

dari

Buenas,

Tengo una classe tal que así:

Archivo .h
=========================
class A
{
public:
enum Acciones
{
accionA = 0,
accionB,
accionC
};

void activarAccion(Acciones a);
void funcionCualquiera();
}


Archivo .cpp (con su include del .h)
=========================
void A::activarAccion(Acciones a)
{
funcionQueRecibeUnEntero(a);
}

void A::funcionCualquiera()
{
arrayYaDeclarado[Acciones::accionA];
}


Pues bien, en la primera función ningún problema, pero en la segunda me dice que "Acciones is not a class or namespace" y que no la puedo usar así, cuando el mismo programa me compila perfectamente en windows :S

¿Alguien me lo puede explicar? Por mucho que busco parece que sea el único del mundo al que le pasa :S

Warchief

Prueba sin Acciones:
arrayYaDeclarado[accionA];

O con el nombre de la clase:
arrayYaDeclarado[A::Acciones::accionA];

dari

#2
Con lo primera funciona (con la segunda no), he creado un namespace y ya me funciona como en windows.

Aunque no entiendo porque en un sitio si y en el otro no :S

Mars Attacks

A simple vista no veo nada raro o mal. Probablemente con un clean y un build se te pase. A veces Xcode hace codewarradas. No dejes de contar cuál era el problema si te lo cruzas.

dari

El problema ni idea :S

El código debía estar bien, en visual studio funcionaba perfectamente, pero en xcode no le daba la gana. En fin, ahora ya va:

namespace Acciones
{
    enum A
   {
      idle = 0,
      longIdle,
      walk,
      run,
      jump,
      frontalHit,
      rearHit
   };
}

array[Acciones::jump]

Así que ni tan mal, ahora a ver cuando lo vuelva a compilar en windows si irá :/

Warchief

#5
Cita de: dari en 20 de Agosto de 2011, 09:16:52 PM
Con lo primera funciona (con la segunda no), he creado un namespace y ya me funciona como en windows.
Aunque no entiendo porque en un sitio si y en el otro no :S

En la segunda queria decir:
arrayYaDeclarado[A::accionA];

Si no recuerdo mal usar el nombre del enumerado no es standard. Los compiladores a veces anyaden extensiones, asi que es probable que sea una extension de Microsoft. C# obliga a usar el nombre.

Un enumerado puede ser anonimo.

Warchief

http://msdn.microsoft.com/en-us/library/ms173704(v=vs.80).aspx
Correcto.

Seguramente estas ignorado este warning the Microsoft. Si estas desarrollando en multiplataforma, recomiendo que pongas warning level 4, y tratar warnings como errores (no compila si hay algun warning), en las propiedades del proyecto.

dari

Muchas gracias, me será muy útil saber eso.
Nunca había compartido un proyecto entre varias plataformas






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.