По сути, ответ отрицательный, вы не можете объявить перечисление в этом контексте. Вы можете выбрать:
- Перевести перечисление в легкий базовый класс.
struct HumanBase
{
enum Language: uint32_t {
None = 0,
English = 1,
Japanese= 2,
};
};
//fwd declare
struct Human;
Переместите перечисление из класса.
enum HumanLanguage : uint32_t {
None = 0,
English = 1,
Japanese= 2,
};
struct Human;
, а затем, если вам потребуется позже, вы можете сделать:
struct Human
{
typedef HumanLanguage Language;
};
Измените все методы, которые используют перечисление, чтобы быть шаблоном (который может работать в некоторых случаях, возможно, не в других)
class Dog{
template<typename LanguageType)
void understand(LanguageType speech);
};