5 / 5 / 0
Регистрация: 10.10.2014
Сообщений: 86
1

Enum forward declaration - как достать базовый тип?

01.11.2018, 19:26. Показов 1446. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

Есть *.h файл, в котором нужно сделать forward declaration enum (не enum class).
Первое что приходит в голову:
C++
1
enum myEnum : int;
Это работает, но не совсем правильно (как я понимаю) в кросплатформенном (Win 64 msvc, Linux 64 gcc) коде явно указывать тип данных явно.

Поэтому второе что приходит в голову:
C++
1
2
3
#include <type_traits>
enum enum_dummy {  }
enum myEnum : std::underlying_type_t<enum_dummy>;
И третье:
C++
1
2
enum enum_dummy { enum_dummy_t }
enum itero_surface_role : enum_dummy::enum_dummy_t;
Но оба этих вариантов не компилируются gcc (msvc не проверял даже).
Есть красивый выход из этой ситуации?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2018, 19:26
Ответы с готовыми решениями:

При создании enum 'имя1' class 'имя2' ошибка use of enum 'имя1' without previous declaration
Добрый день. пишу в qt5: enum typeTable class tabty{readtxt,is,wb,wa,tp}; При сборке...

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt;...

Forward declaration
#ifndef __PROGTEST__ #include много инклудов using namespace std; #endif /* __PROGTEST__ */ ...

Forward declaration
Привет! Есть два класса, один создаёт другой и передаёт в него ссылку на самого себя, чтобы тот...

3
900 / 477 / 93
Регистрация: 10.06.2014
Сообщений: 2,698
01.11.2018, 19:56 2
Создайте структуру а в нем enum
В качестве forward declaration используйте тип структуры
К элементам перечисления можно будет обращаться так: structname::enum_element
Должно сработать
0
5 / 5 / 0
Регистрация: 10.10.2014
Сообщений: 86
02.11.2018, 11:15  [ТС] 3
Проблема оказалась не в gcc, а в кривых руках
Вот так скомпилировалось (по другим причинам ушел с C++14 к C++11):
C++
1
2
enum enum_dummy {  };
enum myEnum : std::underlying_type<enum_dummy>::type;
0
5 / 5 / 0
Регистрация: 10.10.2014
Сообщений: 86
03.11.2018, 09:32  [ТС] 4
Нет, все же так делать не стоит, большинство компиляторов будут ругаться не совпадающие underlying типы, даже если по факту они будут совпадать. Дело в том, что они требуют явного указания типов в обоих местах при использовании forward declaration.
В итоге красивого решения этой проблемы нет. Я плюнул и переписал на PIMPL
0
03.11.2018, 09:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2018, 09:32
Помогаю со студенческими работами здесь

Unsatisfied forward or external declaration
Unsatisfied forward or external declaration - что это значит? процедуры у меня обьявлены в...

Unsatisfied forward or external declaration
Подскажите, что не так или что надо переделать Программа выдает ошибку на 26й строке unit...

Forward declaration и рекурсивный include
В обоих классах нужно использовать поля друг друга, при таком подходе: //Ship.h #include...

Не компилируется модуль: Forward declaration not solved
Не компилируется модуль, компилятор пишет: forward declaration not solved InA (Var d1, d2: string;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru