С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220

Как результат функции конвертировать в тип Enum?

24.03.2015, 11:15. Показов 5974. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто может подсказать как мне результат функции конвертировать в тип Enum, тоесть чтобы результат функции сравнивало со значениями в этом типе Enum и выводило его номер, вместо названия. Функция возвращает std::string.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.03.2015, 11:15
Ответы с готовыми решениями:

Enum и типы данных. Как задать тип значений явно, и какой тип будет при переполнении?
Пытаюсь сделать функцию с передачей нескольких параметров,используя битовые операции. В качестве параметров думаю использовать не...

Как сделать тип enum в структуре беззнаковым
Почему элемент Type структуры BracketBlock signed и как его сделать unsigned, не увеличивая количество бит Type? enum BracketType { ...

Как конвертировать тип класса в string?
Как конвертировать тип класса в string?

20
Заблокирован
24.03.2015, 11:39
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Функция возвращает std::string.
сделай, чтоб она возвращала enum
В чём проблема?

Ну или показывай код функции и своего чудо enum - а
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.03.2015, 11:45
В плюсах нет рефлексии, а стало быть и возможности получения enum'а по его имени.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.03.2015, 11:57
C++
1
2
3
enum my_enum{one,two,three};
std::map<std::string,my_enum>convert{{"one",one},{"two",two},{"three",three}};
my_enum test=convert["three"];
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 12:19  [ТС]
error C2039: 'map' : is not a member of 'std'
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
Ошибки
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
24.03.2015, 12:36
Игорь1986, а предварительно изучить, что такое std::map перед тем как использовать не пробовал?
http://www.cplusplus.com/reference/map/map/
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 12:40  [ТС]
Изучал и подключил map но ошибки остались последние 3
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
24.03.2015, 12:46
Цитата Сообщение от Игорь1986 Посмотреть сообщение
error C2039: 'map' : is not a member of 'std'
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2334: unexpected token(s) preceding '{'; skipping apparent function body
Ошибки
А так (без C++11 стиля инициализации)?
C++
1
2
3
4
5
6
7
8
9
10
11
#include<map>
int main()
{
    enum my_enum{one,two,three};
    std::map<std::string,my_enum>convert;
    convert["one"]=one;
    convert["two"]=two;
    convert["three"]=three;
    my_enum test=convert["three"];
    return 0;
}
0
Заблокирован
24.03.2015, 13:11
ТС, ну ты чЯго? Я же тебе написал, сделай так, что функция возвращала твой enum, в чём трудность - то ?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
enum HYPER_ENUM
{
    ONE = 0,
    TWO = 1,
    THREE = 2
};
 
HYPER_ENUM ReturnSomeShit(int enumNum)
{
    return (HYPER_ENUM)enumNum;
}
 
int main(int argc, char *argv[])
{
    if(ReturnSomeShit(1) == TWO)
        int y= 1;
1
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 13:24  [ТС]
Затмение у нас)))
0
24.03.2015, 14:15

Не по теме:

Цитата Сообщение от Aston Martin Посмотреть сообщение
ReturnSomeShit
:rofl:

0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 14:26  [ТС]
C++
1
2
3
4
5
6
7
enum my_enum{one,two,three};
    std::map<std::string,my_enum>convert;
    convert["one"]=one;
    convert["two"]=two;
    convert["three"]=three;
    my_enum test=convert["three"];
    return 0;
вроде как все понятно, но если я хочу вернуть из своей функции это значение, тоесть вместо return 0;, вставлю
return test; то выводит пустую строку
0
Заблокирован
24.03.2015, 14:37

Да покажи код уже свой чудесный, сразу всё поправим как надо
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 14:43  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
enum DOTypes{
        BOOLEAN=1,
        INT8, 
        INT16, 
        INT24,
        INT32, 
        INT128, 
        INT8U, 
        INT16U, 
        INT24U,
        INT32U, 
        FLOAT32,  
        FLOAT64,
};
теперь функция
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
std::string Parse::Section(const char * path,const std::string & IDType,const std::string & Namefc,const std::string & NameDA)
{
    std::string TypeDONode;
    try
    {
        FFilePath = path; // remember path
        TiXmlDocument doc(path);
        if (!doc.LoadFile(TIXML_ENCODING_UTF8)) 
        {
            return "File don't load!";
        }
        else
        {
            TiXmlHandle handleDoc(&doc);
            TiXmlElement * pElement;
            pElement = handleDoc.FirstChildElement("SCL").ToElement();
            TiXmlElement *DataType=pElement->FirstChildElement("DataTypeTemplates");
            if(DataType)
            {
                TiXmlElement* DOType = DataType->FirstChildElement("DOType");
                if (DOType)
                {
                    for (TiXmlElement * iterDOType = DOType; iterDOType; iterDOType = iterDOType->NextSiblingElement("DOType"))
                    {
                        if(iterDOType->Attribute("id")==IDType)
                        {
                            TiXmlElement *DA=iterDOType->FirstChildElement("DA");
                            if(DA)
                            {
                        for (TiXmlElement * iterDA = DA; iterDA; iterDA = iterDA>NextSiblingElement("DA")) 
                                {
                            if((iterDA->Attribute("name")==NameDA)&&(iterDA->Attribute("fc")==Namefc))
                                    TypeDONode =iterDA->Attribute("bType");
                                }//end for iterDA
                            }//end if DO
                        }//end if compare
                    }//end for iterLNodeType
                }//end if LNodeType
            }//end if DataType
        }// end else
        return TypeDONode;
    }//end try
    catch (...)
    {
        return "Other exception!";
    }
}
вот в этой строке находится мое строковое значение которое необходимо заменить цифрой из энама
TypeDONode =iterDA->Attribute("bType");
тоесть если значение BOOLEAN то вывести 1 ну и так далее по списку
0
Заблокирован
24.03.2015, 14:54

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
ReturnSomeShit
Судя по куче гавна кода выше, тут больше подойдёт: ReturnPackOfBullShit()



ТС, я никак не могу понять, в чём твоя проблема? Ты считал из XML-я какую - то строку типа "INT128" и хочешь, чтоб эта строка волшебным образом превратилась во что - то из твоего enum-а, ну например в INT128 ?
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 14:58  [ТС]
Почти допустим превратилась не в INT128, а его номер в энаме тоесть 6
0
Заблокирован
24.03.2015, 15:04
Ну так напиши функцию конвертор:

Вот превращение в сам enum:
C++
1
2
3
4
5
6
7
8
DOTypes ConvertStringToDOType(std::string typeName)
{
    if(typeName == "INT128")
        return INT128;
    else if(typeName == "FLOAT64")
        return FLOAT64;
    //else if ... и тд
}
Вот в порядковый номер:
C++
1
2
3
4
5
6
7
8
int ConvertStringToDOType(std::string typeName)
{
    if(typeName == "INT128")
        return (int)INT128;
    else if(typeName == "FLOAT64")
        return (int)FLOAT64;
    //else if ... и тд
}
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 15:06  [ТС]
Я уже понял что проще с case работать
0
Заблокирован
24.03.2015, 15:11
Цитата Сообщение от Игорь1986 Посмотреть сообщение
Я уже понял что проще с case работать
А ты думал, что строка может автоматический сконвертироваться в название enum-а, которое ты в коде написал?
Для этого обычно наворачивают мета систему, вот Qt допустим такое и много другое возможно
Так что выкинул бы давно своё WinApi и реджойнулся бы на кроссплатформенное мега Qt
0
156 / 143 / 62
Регистрация: 08.09.2014
Сообщений: 1,220
24.03.2015, 15:12  [ТС]
Наивный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2015, 15:12
Помогаю со студенческими работами здесь

Как мне конвертировать адрес указателя (например 00A88B68) в тип string ? C++
вопрос в имени темы

Тип enum и нумерация
Всем здрасьте ! У меня есть тип enum, который описывает что-то: enum NUM { X1, X2, X3, ...} Каждый Х, имеет свой смысл и число,...

Заголовочный файл и тип enum
Задание состоит в том, что надо программу разбить на три части: заголовочный файл Factor.h, у меня он такой получился: #include...

Перечисляемый тип enum + switch
Всем привет, прошу помочь разобраться, делаю структуры и все никак не могу сделать так , чтобы заработал фрагмент программы связанный с...

Перечислимый тип enum ,что это?
Не пойму зачем он нужен,если все равно он возвращает целые числа? Как обращаться именно к имени(string) элемента типа enum?К примеру...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru