Задать значение для перечисления в том же пространстве имен, но в другом классе? C ++ - PullRequest
0 голосов
/ 14 апреля 2011

РЕДАКТИРОВАТЬ Благодаря комментариям под вопросом я понял, что вы также должны объявить enum в заголовочном файле.>. <Почему в интернете ничего не говорится об этом?Теперь компилятор распознает геолога. </p>

Мое перечисление находится в пределах namespace Star в классе с именем GameModeState, но мне нужно проверить текущее значение перечисления в классе с именем ZoneMovementState, который также использует namespace Star.У меня GameModeState включен в верхней части ZoneMovementState.Объявление enum в GameModeState выглядит следующим образом:

enum Job {Landman = 0, Geologist = 1};

Я пытаюсь использовать этот код в ZoneMovementState:

int placeholderJob = Star::GameModeState::Geologist;
//or I've tried this
int placeholderJob = GameModeState::Geologist;

По какой-то причине мой компилятор не распознает Geologist ни в одной из попыток;как мне установить placeholderJob для геолога?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2011

Почему в интернете ничего не говорится об перечислениях?

Интернету не нужно упоминать об этом, потому что он использует единицы компиляции.

Заголовочные файлы предназначены для того, чтобы сообщить компилятору (в основном), какие имена ( идентификаторы ) существуют и что они представляют. Вот почему компилятор сообщает вам, когда он не знает, что представляет геолог.

То же самое относится и к функциям, полям, классам, структурам, typedefs, пространствам имен, поэтому на самом деле вопрос будет

Зачем компилятору магически знать о перечислениях в другом модуле компиляции, когда все остальное должно быть написано для него?

0 голосов
/ 14 апреля 2011

Разве он не признает геолога в рамках вашей программы?(При наведении указателя мыши появляется всплывающее окно intellisense, показывающее, что Geologist имеет тип enum, равный 1) или под ним находится волнистый контур (что указывает на то, что он не распознает тип?)

Это может бытьпроблема с областью видимости (хотя, исходя из вашей информации, это не похоже на это) или, возможно, используемый вами компилятор не позволяет установить значение перечисления в целое число без явного приведения.

...