На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Константа из класса, для case. Помогите с синтаксисом.
    Здравствуйте!

    Столкнулся тут с проблемкой.
    У меня есть класс, а в нём перечисление.
    ExpandedWrap disabled
      class SomeClass
      {
      public:
       
      SomeClass()
      {
      type = const0;
      }
       
      enum
      {
          const0,
          const1,
          const2
      } type;
       
      };


    И в одном месте, мне нужно получить доступ к этим константам из вне.

    Вот например так:
    ExpandedWrap disabled
      SomeClass* sc = new Someclass();
      ...
      if( SomeClass::const1 == sc->type )
          ...

    Это работает. Но вот в многовариантном выборе возникают проблемы.

    ExpandedWrap disabled
      switch( sc->type )
      {
       
      //  в следующей строке синтаксис не проходит
      case SomeClass::const0:
          ...
      break;
       
      case SomeClass::const1:
          ...
      break;
       
      case SomeClass::const2:
          ...
      break;
       
      }


    Компилятор тут же начинает ругаться
    Цитата

    error: case label ` const0' not within a switch statement

    И примерно так же на остальное.

    Пробовал брать выражение SomeClass::const0 в круглые скобочки - не помогло.

    Использую MinGW.

    Как написать по другому, не знаю.
    Подскажите пожалуйста.
      В VC норм. Единственно, что смутило - SomeClass* sc = new Someclass();
      Это нормально для MinGW?
      Сообщение отредактировано: ss -
        Ну такая запись у меня работала всегда нормально.

        А вот на строку
        case SomeClass::const0:
        ругаеться.

        Попробую ещё поэксперементировать.
        Возможно что ошибка где-то в другом месте моего проекта...

        Добавлено
        Да, похоже что ошибка в другом месте.
        Ща протестил в отдельном коде, и всё скушалось.
        Но не понятно, почему тогда ругаеться, сначало на эту строчку...
          Может при объявлении перечисления нужно задать начальный индекс:
          ExpandedWrap disabled
            enum
            {
                const0 = 0,
                const1,
                const2
            } type;

          хотя компилятор их "автоиатом" с нуля индексирует.
          Сообщение отредактировано: AnarchyMob -
            Значение инициализации, нельзя задавать в описании класса.
            Я сделал это в конструкторе, как привёл выше.
            Да и не в этом дело.

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


            Рейтинг@Mail.ru
            [ Script execution time: 0,0491 ]   [ 16 queries used ]   [ Generated: 10.11.25, 12:43 GMT ]