Making Forward Declaration Class's enum Member Visible

Y

yancheng.cheok

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
 
M

mlimber

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
 
M

mlimber

mlimber said:
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
 
R

Ron Natalie

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,819
Latest member
masterdaster

Latest Threads

Top