I work in C ++ 11 and include the h file implemented in C ++ 03. In the h file, I include the Foo enumeration there. I want to declare it in code.h and use it in code.cpp :
header.h:
enum Foo {A=1};
code.h:
enum Foo : int; // also tried : unsigned int, long, short, unsigned short, char, unsigned char void bar(Foo foo);
code.cpp:
#include header.h void bar(Foo foo) { }
This is the error I get when compiling (checked g ++ 4.8.5 and g ++ 5.3.1):
In file included from code.cpp:2:0: header.h:1:6: error: underlying type mismatch in enum 'enum Foo' enum Foo {A=1}; ^ In file included from code.cpp:1:0: code.h:3:12: error: previous definition here enum Foo : int;
I can fix this error if I change the .h header to:
enum Foo : int {A=1};
But I do not own this title and cannot change it. Accepting an error on the value of the face, it sounds as if I need to know what type g ++ uses for enums that do not indicate a base type, and then use that type in my transition.
Even this simple example does not work :
#include <iostream> #include <string> #include <type_traits> enum Foo {A=1}; enum Foo : unsigned; // : std::underlying_type<Foo>::type also doesn't work int main() { std::cout << "Hello, world\n"; }
c ++ gcc c ++ 11 g ++ forward-declaration
ytoledano
source share