wrote:
> how can i make, a forward declaration class's enum member, being
> visible by another class?
>
> consider the following case,
>
> ----------------------------
> dog.h
> ----------------------------
> #ifndef DOG_H
> #define DOG_H
>
> // class forward declaration.
> class cat;
>
> class dog
> {
> public:
> enum dog_enum
> {
> d0, d1, d2
> };
>
> void speak(cat *c);
> };
>
> #endif
>
> ----------------------------
> cat.h
> ----------------------------
> #ifndef CAT_H
> #define CAT_H
>
> #include "dog.h"
>
> class cat
> {
> public:
> void speak(dog *d, dog::dog_enum e);
> };
>
> #endif
>
> The above cat and dog just work fine. Now, let me create an enum type
> for cat too.
>
> ----------------------------
> dog.h
> ----------------------------
> #ifndef DOG_H
> #define DOG_H
>
> // class forward declaration.
> class cat;
>
> class dog
> {
> public:
> enum dog_enum
> {
> d0, d1, d2
> };
>
> // OPPS! HOW DO WE FORWARD DECLARE ENUM???
> void speak(cat *c, cat::cat_enum e);
> };
>
> #endif
>
> ----------------------------
> cat.h
> ----------------------------
> #ifndef CAT_H
> #define CAT_H
>
> #include "dog.h"
>
> class cat
> {
> public:
> enum cat_enum
> {
> c0, c1, c2
> };
>
> void speak(dog *d, dog::dog_enum e);
> };
>
> #endif
>
> My question is, how can "dog" see the cat_enum, which is re-inside cat?
> I was understand that forward declaration for enum is not allowed in
> c++.
>
> Is there any workaround for this?
Yes: pull the enum outside the class, putting it in the same namespace
as its associated class. Then in cat.h, you can do:
namespace Canine
{
enum dog_enum;
class dog;
}
class cat
{
// ...
void MewAt( Canine::dog*, Canine::dog_enum );
};
and in dog.h, you can do:
namespace Feline
{
enum cat_enum;
class cat;
}
class dog
{
// ...
void BarkAt( Feline::cat*, Feline::cat_enum );
};
Cheers! --M