LINUX.ORG.RU

Использование enum в switch


0

0

Есть такая конструкция.

В заголовке:

typedef enum TWPages
             {
                 TWP_HEADER = 0,
                 TWP_LOAD_SEQ,
                 TWP_TPL_SRC,
                 TWP_DATA_SRC,
                 TWP_LOAD_SRC,
                 TWP_SQL_QUERY,
                 TWP_LOGGING
             } TabWidgetPage;
								
В программе:

94     switch ( InfoTabWidget->currentPage () )
95     {
96         case TWP_HEADER:
97         case TWP_LOAD_SEQ:
98         case TWP_TPL_SRC:
99                             LoadTemplateFile ();
100                             break;
101         case TWP_DATA_SRC:
102                             LoadDataFile ();
103                             break;
104         default:
105                             ;
106     }
						  
Ошибки компилера:

src/cmainform.cpp: In method `void CMainForm::fileOpen ()':
src/cmainform.cpp:94: switch quantity not an integer
src/cmainform.cpp:98: duplicate case value `TWP_TPL_SRC'
src/cmainform.cpp:97: previously used here
src/cmainform.cpp:101: duplicate case value `TWP_DATA_SRC'
src/cmainform.cpp:97: previously used here

Вопрос: как использовать правильно множества в switch?

Читал-читал нифиги не нашел ошибки, скормил своему gcc 3.2.2 следующую модификацию 
твоего кода:

------------------------------------------
typedef enum TWPages
             {
                 TWP_HEADER = 0,
                 TWP_LOAD_SEQ,
                 TWP_TPL_SRC,
                 TWP_DATA_SRC,
                 TWP_LOAD_SRC,
                 TWP_SQL_QUERY,
                 TWP_LOGGING
             } TabWidgetPage;
								
int main(int argc, char **argv)
{

	TabWidgetPage qqq = TWP_LOGGING;

	switch ( qqq )
	{
	case TWP_HEADER:
	case TWP_LOAD_SEQ:
	case TWP_TPL_SRC:
//		LoadTemplateFile ();
		break;
	case TWP_DATA_SRC:
//		LoadDataFile ();
		break;
	default:
		;
	}
        return 0;
}
------------------------------------------

Он скушал "на ура"... Есть у меня скромные подозрения что собака порылась в другом
месте... Кстати не множества, а перечисления... ;)

tarle
()

1. Какой тип возвращает InfoTabWidget->currentPage () ? явно не int, об этом и ругань

2. У тебя в энуме 2 элемента с одним и тем же значением (0), о чем тебе и сказал компилятор. Это TWP_HEADER и TWP_LOAD_SEQ





NewComer
()
Ответ на: комментарий от NewComer

>1. Какой тип возвращает InfoTabWidget->currentPage () ? явно не int, об этом и ругань

Да, действительно ... а слона то и не заметил .... :)
Надо было currentPageIndex (). А currentPage () возвращает QWidget *,
всё верно ... спасибо большое!
После этого перестал ругаться! ;))

RomanU
() автор топика
Ответ на: комментарий от NewComer

2NewComer: ты не прав. Нумерация начинается со явно указанного значения, или с нуля. Т.е. TWP_LOAD_SEQ == 1.

anonymous
()
Ответ на: комментарий от anonymous

Полностью поддерживаю анонимуса :) Ну я просто не стал ничего говорить, это итак понятно ... ПРосто меня "слегка" удивили сообщения компилера, что там _одинаковые_ значения. :) Всегда знал, что разные, а тут ... бац тебе! :) Просто глюк парсинга наверное. Но про то, что не int - он верно сказал! Я даже сразу ошибку то нашёл. Спасибо за это.

RomanU
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.