Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ Forward declaring class scoped enumeration

Tags:

c++

c++11

I'm wondering if it's possible to forward declare an enum that's defined within another class scope. For example, consider the following:

//A.h class A { public:     enum class type: unsigned long { /*some stuff*/ } }; 

Now, in another header I'd like to forward declare the 'type' enum (suppose class B below has a function that does something with A::type)

//B.h enum A::type; //use of undefined type 'A'  class B { public:     UseTypeEnum(A::Type&); }; 

This doesn't work either:

//B.h class A; enum A::type; //still use of undefined type  class B... 

There's no problem if the enum is declared at global scope in A.h.

Is there any way to do this?

like image 997
Aeluned Avatar asked Dec 12 '12 14:12

Aeluned


People also ask

Can I forward declare enum class?

Forward Declaration of Enums (C++11) BCC32 introduces forward declaration of enums. You can declare an enumeration without providing a list of enumerators. Such declarations would not be definitions and can be provided only for enumerations with fixed underlying types.

What is class forward declaration?

In C++, Forward declarations are usually used for Classes. In this, the class is pre-defined before its use so that it can be called and used by other classes that are defined before this.

Why use forward declarations C++?

A forward declaration allows us to tell the compiler about the existence of an identifier before actually defining the identifier. In the case of functions, this allows us to tell the compiler about the existence of a function before we define the function's body.

What is function forward declaration?

In computer programming, a forward declaration is a declaration of an identifier (denoting an entity such as a type, a variable, a constant, or a function) for which the programmer has not yet given a complete definition.


1 Answers

You can't declare nested types outside the class definition.

If you need to use them outside the class, you will have to either include the class definition, or move them into a namespace.

like image 154
Mike Seymour Avatar answered Oct 04 '22 14:10

Mike Seymour