Как получить доступ к перечислимому классу C ++ 11 из другого файла? - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть заголовочный файл, который в конечном итоге будет включать более одного класса enum.Однако, когда я включаю заголовочный файл в другой файл и пытаюсь использовать класс enum, моя программа не будет компилироваться.Например:

enums.h:

#ifndef ENUMS_H
#define ENUMS_H

enum class TokenType : char
{
     IDEN,
     STRING,
     SEMICO
};

#endif

и main.cpp:

#include <iostream>
#include "enums.h"

int main()
{
     char token = TokenType::STRING; //Does not compile!
}

Однако, когда я использую обычный enum, он компилируетсяправильно:

enums.h:

#ifndef ENUMS_H
#define ENUMS_H

enum TokenType : char
{
     IDEN,
     STRING,
     SEMICO
}

#endif

и main.cpp:

#include <iostream>
#include "enums.h"

int main()
{
     char token = STRING; //This does compile!
}

Кто-нибудь знает, как это сделать правильно?Я много искал и ничего не нашел.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Enum является строго типом, и вы не можете присваивать enum для типа int или char без его приведения.Вы можете попробовать:

int main() 
{
  char token = (char)TokenType::STRING; 
}
0 голосов
/ 16 февраля 2019

enum class не участвуют в неявном преобразовании, а перечисления с незаданной областью -.Таким образом,

int main()
{
     TokenType token = TokenType::STRING;
}

будет компилироваться.

Вы можете увидеть Как автоматически конвертировать строго типизированный enum в int? Как иначе конвертировать enum class в другойзначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...