Hi, Need information on support of scoped enums in Keil compiler. My final objective is to use the Enums as AIAction:Enter</i or AIAction:Exit instead of plain Enter or Exit in the source code C files. This is to solve the global namespace pollution.
I have the following structure in header file :
struct AIAction{ enum AIActionType { Enter, Exit, Run, }; };
For using it, following is the code in C file (filetype is C)
int iType; iType = AIAction::Run;
When I compile this with current settings, it is giving me error #618: struct or union declares no named members
However, if I change the filetype to C++, it compiles successfully. So basically C++ compiler is allowing such structure definition.
From this, I infer that C has got limitation of not allowing any non-named members in structures.
How do I use the enums the way I want? Can this be achieved without using C++ compiler?
Note that if it's enough to add a data member to the struct to make the compiler happy, then this will not cost you any memory space, since you do not intend to instantiate the struct.
Sorry Per. Didn't understand what you meant.
You complained about the error message: "When I compile this with current settings, it is giving me error #618: struct or union declares no named members"
If you modify to:
struct AIAction { enum AIActionType { Enter, Exit, Run, } dummy; // <= make sure there is a named member };
Then you do have a named member, so the compiler error message should go away. And it doesn't cost you any RAM, since you will not instantiate any variable of type struct AIAction.
Yes Per. I did that and I couldn't get anymore error. But then, I cannot use AIAction::Enter because then you will be required to create variable of struct AIAction type.