24.05.2004, 18:17 | #1 |
Участник
|
проблема с работой оператора switch
помогите разобраться....
значит так ss - перечисляемый тип в таблице table поле StrType создано на основании этого типа. и вот такой код: Method(str lineName) while select table where table.StrType == ss::enmValue { switch (lineName) { case 'M01' : ... break; case 'M02' : ... break; } } при компиляции на втором case генерится совершенно непонятное сообщение: "Типы операнда не совместимы с оператором" причем замечено, что это напрямую связано с нахождением в условии выборки ss::enmValue... без этого свич работает нормально... я правда заменил свич набором операторов if... и как бы зработало, но все таки интересно... это глюк... или я где-то туплю... |
|
25.05.2004, 15:44 | #2 |
Участник
|
При использовании перечисляемых типов данных в некоторых случаях происходит их автоматическая конвертация.
Т.е. хотя Enum - это целое число в диапазоне от 0 до 255, но в некоторых случаях вместо числового значения подставляется их символьное значение. Как будто происходит неявное выполнение конвертации enum2str() Чтобы избежать этого недоразумения, надо использовать не напрямую переменную типа Enum, а выражение с этой переменной: PHP код:
|
|
25.05.2004, 16:30 | #3 |
----------------
|
Мне кажется, что проблема самая обычная "str lineName" - использование строки без ограничения по длине приводит к разным станностям.
|
|
25.05.2004, 16:48 | #4 |
Участник
|
сори... я не правильно определил источник ошибки... дело оказалось не в нумераторе, а в заключенном в секциии case команде update_recordset...
структура вот такая: PA_PlanBody rsUpdate; str lineName; switch (lineName) { case 'M01': ttsbegin; update_recordset rsUpdate setting Month01 = plan.Month01, State01 = plan.State01 where rsUpdate.PlanID == planId; ttscommit; break; case 'M02': ttsbegin; update_recordset rsUpdate setting Month02 = plan.Month01, State01 = plan.State01 where rsUpdate.PlanID == planId; ttscommit; break; } так вот ... при компиляции, компилятор ругается на сторку "case 'M02':" - "Типы оператора не совместимы с оператором" сама команда апдейта исполняется нормально... но в кэйс-структуре жить не хочет... так что это может быть... |
|