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?
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.