С Новым годом! Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
5 / 5 / 0
Регистрация: 10.10.2014
Сообщений: 86
1

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

01.11.2018, 19:26. Показов 1452. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
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
Ответ Создать тему
Новые блоги и статьи
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru