Переменная типа Enum в разных модулях

Тема в разделе "C и С++ FAQ", создана пользователем Andrey97, 11 окт 2010.

Статус темы:
Закрыта.
  1. Andrey97

    Andrey97 Гость

    C++ Builder 6.

    В модуле 1 объявлена переменная:
    Код (C++):
    enum {a, b, c} State;
    В модуле 2 при попытке присвоить переменной значение
    Код (C++):
    State=a;
    выдается ошибка
    [C++ Error] Unit1.cpp(107): E2451 Undefined symbol 'a'.
    Почему то компилятор переменную "видит" но "не видит" строковую константу внутри объявленной переменной.
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Я точно не помню,но помойму перечисляемые константы доступны только в определнном пространстве имен или в текущем модуле

    так что даже ни какой extern не поможет, из чего следует, что смело перемещай его в заголовочный файл отдельный и подгружай #include ом
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    А лучше при описание используй пространство имен, что бы не напутать с объявленным идентификаторамы переменных и констант

    Код (C++):
    //Заголовочный файл
    namespace MyStatus
    {
    enum {a, b, c} State;

    }
    //----------------------------------

    #include "Наш заголовочный файл"

    {
    int State;
    State = MyStatus::c;


    }
     
  4. Andrey97

    Andrey97 Гость

    Обошлось без пространства имен.
    Вообще переменные enum входят в состав структуры. Я в заголовочном файле объявил теги enum, затем объявил тип структуры с содержанием этих типов enum. При подключении такого файла другой модуль не ругается на имена значений enum.
    Все равно всем спасибо!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей