Одно имя костанты но в разных перечислениях, возможно ли?

Тема в разделе "WASM.BEGINNERS", создана пользователем EvilsInterrupt, 13 июл 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Надо структуру классов мне проработать, а тут кой какая трабла:

    Есть:
    enum ASUTP_ERR
    {
    SUCCESS=0x0, // Все успешно
    SRE_INIT, // Ошибка при инициализации sre-файлов
    CONFIG_APP, // Ошибка Конфигурирования программы
    DATABASE_CONNECT, // Ошибка связи с базой данных
    INIFILE_INVALID, // Некорректный Ini-файл
    ORA_INIT, // Ошибка при инициализации Oracle
    ORA_APPEND, // Ошибка добавления в Oracle
    INIFILE_NOT_FOUND, // Ini-файл не найден
    CFGDBF_NOT_FOUND, // Cfg.dbf не найден
    };

    и

    enum ASUTP_RESULT{ SUCCESS = 0x0, FAIL };

    пишу метод класса:
    ASUTP_RESULT CreateObject(AnsiString PathObj) virtual;

    А получаю что SUCCESS множественный, но ведь он же в разных перечислениях, где с тупил?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    EvilsInterrupt
    Опять мануалы не читал. Грубо говоря, элементы перечисления становятся элементами той области видимости, в которой они объявлены: если в классе - элементами класса, в файле - элементы единицы трансляции. Объявляй их в структурах, если они в классе, либо в пространстве имён, если они в файле, либо ставь префиксы.
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Ща вот еще одна трабла проект на Borland Builder C++ 6.0:
    Код (Text):
    1. class   ASUTPbase
    2. {
    3. public:
    4.   virtual ASUTP_RESULT ReadObject(AnsiString PathObj,TDateTime Momment) = 0;
    5. .....
    6. class   AllMig : public ASUTPbase
    7. {
    8. public:
    9.  
    10. ...
    11. ASUTP_RESULT AllMig::ReadObject(AnsiString PathObj,TDateTime Momment)
    12. тут пишу реализацию
    Получаю:
    [C++ Error] ASUTP.hpp(8): E2316 'AllMig::ReadObject(AnsiString,TDateTime)' is not a member of 'AllMig'

    Как это так, Ведь AllMig наследует все от базового, в котором есть ReadObject. А компилятору не нравится, что я упускаю? Очень надо!!!
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    EvilsInterrupt
    Вот именно, что наследует, т.е. берет как есть из базового класса. Поэтому свою реализацию AllMig::ReadObject можно иметь только при переопределении родительского метода
     
  5. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    leo
    Я сделал заново объявление чистого виртуального методода в потомке и почему-то заработало!!! Разве шапку и объявление из базового компилятор не мог взять?
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Мог, но не захотел :))))))
    Еще раз повторяю: если ты в объявлении потомка AllMig не переобъявляешь родительские методы ASUTPbase, значит их объявление и реализация соответствует родительской и ес-но попытка приписать новую реализацию без переобъявления приводит к ошибке
     
  7. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    АБАааа!