Если мы говорим про C, то так делать нельзя:
1. Вложенные в enum определения делать нельзя - это ограничение самого синтаксиса (
дока)
2. Для использования перечислений не надо указывать само название перечисления. Т.е. не
OBJ::SOMETHING
, а просто
SOMETHING
. Т.е. видимость глобальная и нельзя дублировать названия, даже для разных enum
В случае C++ аналогично. Есть
хак - использование неймспейсов или структур для топ левела, но не в твоем случае - ты хочешь топ левел перечислениям значения задавать
На мой взгляд тут решение:
1. Разбить их на различные перечисления
2. Добавить каждому префикс
enum OBJ = 0 {
Default = 0,
Something_Something1 = 1,
Something_Something1 = 2,
Something = 7
};