|
|
|
switch
|
|||
|---|---|---|---|
|
#18+
Visual C++ 6.0 Функция получает типа CString Значения “TN”, “PP”, “BD” Хочу реализовать оператор switch void CEnterDaoSDI_testView::DoFilter(CString col) { switch (col) // error C2450: switch expression of type 'class CString' is illegal – НЕЗАКОННО CString { case "PP": . . . . . . . . . break; case "TN": break; case "BD": break default: break; } Как обойти ? СПАСИБО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 17:56 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
Switch selection expression must be of integral type 1. Передавай в функцию целочисленную переменую... 2. Не испоьлзуй switch 3. сделай функцию для установки соответствия твоим параметрам int'ов ... После default break не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 18:18 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
Обычно делают массив ключевых слов, ищут слово в этом массиве и делают switch по индексу ключевого слова. Для удобства еще можно объявить символьные константы (или переменные - константы) для каждого ключевого слова, совпадающие с этим ключевым словом, как то Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2006, 21:47 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
Есть еще извратный способ. Так как у тебя слова из 2-х букв, то можно делать свич по первой букве, и внутри него свич по второй. Но так никогда не далают, т.к. он не отражает логику программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 09:41 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
Я лично не знаком с классом CString и не знаю его структуры, но вероятне всего в классе CString не реализованы операторы сравнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 12:54 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
KOs-ua почему же, реализованы давным-давно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 13:05 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
А почему бы не использовать strcmp() и выбросить этот swich{} ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 13:12 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
ParadoxxА почему бы не использовать strcmp() и выбросить этот swich{} ?? автор написал: "Хочу реализовать оператор switch". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 13:33 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
ОсинаVisual C++ 6.0Функция получает типа CString Значения “TN”, “PP”, “BD” Хочу реализовать оператор switch....CString.... Если заглянуть на самый "низ" - ассемблерный код, того что получаеться после свитча...То имеем, что то типа... 1) входное число отработать на ограничение с верху и с низу, привести его к размерности таблицы перехода. 2) перейти по указателю из таблицы перехода... всё... другими словами а) операнды есть ЧИСЛА б) соответствие "ЧИСЛО" = "КОД обработки" и должно быть ОДНОЗНАЧНО задано. в) данная операция работает БЫСТРЕЕ чем некоторое кол-во ифов (зависит от кол-ва не успешных сравнений). Продвинутые оптимизаторы сами подсчитывают мопсы и могут заменить свитч на комбинации из последовательных ифов... Зная это можно: а) применить не стринговые а числовые коды. б) использовать MAPы (вроде как там стринги были, если не глючу) в) использовать подходы описанные выше (повторяться не охота). с уважением (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 17:12 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 08:08 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
ОсинаVisual C++ 6.0 Функция получает типа CString Значения “TN”, “PP”, “BD” Хочу реализовать оператор switch void CEnterDaoSDI_testView::DoFilter(CString col) { switch (col) // error C2450: switch expression of type 'class CString' is illegal – НЕЗАКОННО CString { case "PP": . . . . . . . . . break; case "TN": break; case "BD": break default: break; } Как обойти ? СПАСИБО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2006, 04:15 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
Можно вообще без switch Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2006, 10:33 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
более нагляден и похож на switch аналог без else if, а с break-ами Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2006, 11:24 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
Землекоп: для того, чтобы break исполнялся, иначе будет ругаться, что его без цикла/свитча заюзать пытаются. (break statement not within loop or switch). Но понятно, что цикл - вырожденный, ибо false. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2006, 21:51 |
|
||
|
switch
|
|||
|---|---|---|---|
|
#18+
KOs-uaЯ лично не знаком с классом CString и не знаю его структуры, но вероятне всего в классе CString не реализованы операторы сравнения. Да будет известно уважаемому, что в языке С++ , равно как и в языке С, в операторе switch в т.н. метках выбора допускается указывать только КОНСТАНТЫ неинтегрального типа. Т.е. строки там указывать нельзя. Поэтому оператор == не поможет, поскольку использоваться там он не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2006, 23:57 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33906362&tid=2030691]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
134ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 420ms |

| 0 / 0 |
