By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
434,917 Members | 1,305 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 434,917 IT Pros & Developers. It's quick & easy.

Making Forward Declaration Class's enum Member Visible

P: n/a
hello all,

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?

Thank you very much

Aug 10 '06 #1
Share this Question
Share on Google+
3 Replies


P: n/a
ya************@gmail.com 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

Aug 10 '06 #2

P: n/a
mlimber wrote:
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;
}
namespace Feline // Forgot this... sorry
{
enum cat_enum { c1, c2 };
class cat
{
// ...
void MewAt( Canine::dog*, Canine::dog_enum );
};
}
>
and in dog.h, you can do:

namespace Feline
{
enum cat_enum;
class cat;
}
namespace Canine
{
enum dog_enum { d1, d2 };
class dog
{
// ...
void BarkAt( Feline::cat*, Feline::cat_enum );
};
}

Cheers! --M

Aug 10 '06 #3

P: n/a
ya************@gmail.com wrote:
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?
Declare the enums separately from the classes. Use a namespace
if you like.
Aug 11 '06 #4

This discussion thread is closed

Replies have been disabled for this discussion.