Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2010, 00:04   #1
i-cpp
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 33
По умолчанию switch и string???

Не пойму где ошибся. Помогите разобраться
Код:
struct Card {
	String suit;
	String face;
};

String pointsCalc(vector< Card > &gamer, TLabel *&lblPoints)
{
	int points = lblPoints->Caption.ToInt();
	for (size_t i = 0; i < gamer.size(); i++) {
		switch (gamer[i].face) {
		case "junior":
			points += 2;
			break;
		case "queen":
			points += 3;
			break;
		case "king":
			points += 4;
			break;
		case "ace":
			points += 11;
			break;
		default:
			points += gamer[i].face.ToInt();
		}
	}
	return String( points );
}
Код:
[BCC32 Error] Main.cpp(82): E2383 Switch selection expression must be of integral type
[BCC32 Error] Main.cpp(83): E2313 Constant expression required
[BCC32 Error] Main.cpp(86): E2313 Constant expression required
[BCC32 Error] Main.cpp(86): E2172 Duplicate case
[BCC32 Error] Main.cpp(87): E2188 Expression syntax
[BCC32 Error] Main.cpp(89): E2313 Constant expression required
[BCC32 Error] Main.cpp(89): E2172 Duplicate case
[BCC32 Error] Main.cpp(90): E2188 Expression syntax
[BCC32 Error] Main.cpp(92): E2313 Constant expression required
[BCC32 Error] Main.cpp(92): E2172 Duplicate case
[BCC32 Error] Main.cpp(93): E2188 Expression syntax
i-cpp вне форума Ответить с цитированием
Старый 12.02.2010, 00:11   #2
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Код:
switch (gamer[i].face) {
		case "junior":
			points += 2;
			break;
		case "queen":
			points += 3;
			break;
		case "king":
			points += 4;
			break;
		case "ace":
switch и string - несовместимые вещи..
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 12.02.2010, 00:18   #3
i-cpp
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 33
По умолчанию

как выкрутиться?

хотя, может сам щас придумаю, спс

Последний раз редактировалось Stilet; 12.02.2010 в 13:18.
i-cpp вне форума Ответить с цитированием
Старый 12.02.2010, 00:24   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Добавлю.
Вам придётся делать тока так:
Код:
if ( strcmp( gamer[i].face, "junior" ) points += 2; else
if ( strcmp( gamer[i].face, "queen" ) points += 3; else
...
А можно вопрос, а вам что без строк не обойтись? Если у вас здесь строки - тока константы и дополнительного смысла не несут, то можно оформить как енум и всё.
Carbon вне форума Ответить с цитированием
Старый 12.02.2010, 00:26   #5
i-cpp
Пользователь
 
Регистрация: 05.12.2009
Сообщений: 33
По умолчанию

>>енум
Carbon, первоя моя мысль как это сделать
>>if
Carbon, вторая моя мысль как это сделать

спасибо, я того же мнения))

Цитата:
Go Up to Compiler Errors And Warnings (C++) Index

The selection expression in parentheses in a switch statement must evaluate to an integral type (char, short, int, long, enum).

You might be able to use an explicit cast to satisfy this requirement.
для информации с docwiki.embarcadero.com/

вот что у меня вышло , если кому интересно.
Код:
String pointsCalc(vector< Card > &gamer, TLabel *&lblPoints)
{
	int points = lblPoints->Caption.ToInt();
	for (size_t i = 0; i < gamer.size(); i++) {
		if ( strcmp( gamer[i].face.t_str(), "junior" )) points += 2; else
		if ( strcmp( gamer[i].face.t_str(), "queen" )) points += 3; else
		if ( strcmp( gamer[i].face.t_str(), "king" )) points += 4; else
		if ( strcmp( gamer[i].face.t_str(), "ace" )) points += 11; else
			points += gamer[i].face.ToInt();
	}
	return String( points );
}
Тема закрыта)

Последний раз редактировалось Stilet; 12.02.2010 в 13:18.
i-cpp вне форума Ответить с цитированием
Старый 12.02.2010, 01:06   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Кстати, раз уж используется класс строки, то, вероятнее всего, можно писать так:
Код:
if(gamer[i].face == "junior") ...
netrino вне форума Ответить с цитированием
Старый 12.02.2010, 13:10   #7
Корвин
Пользователь
 
Аватар для Корвин
 
Регистрация: 07.02.2010
Сообщений: 31
По умолчанию

Все проще, стринг основан на чаре, соответственно, передаете нге стринг, а кажется там переменная с данным этого класса называется .p_str (если память не изменяет.
Код:
string myString("abc");

switch(myString.p_str){
     ...
}
ну или что то в этом роде.
#define true false
У сверхпрограммы будут сверхглюки, ха-ха!
Корвин вне форума Ответить с цитированием
Старый 12.02.2010, 14:58   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Корвин Посмотреть сообщение
Все проще, стринг основан на чаре, соответственно, передаете нге стринг, а кажется там переменная с данным этого класса называется .p_str (если память не изменяет.
Код:
string myString("abc");

switch(myString.p_str){
     ...
}
ну или что то в этом роде.
Увы, в C++ так нельзя.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на switch ProgramerBeatz Общие вопросы C/C++ 12 25.01.2011 00:59
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57
язык C, switch pproger Общие вопросы C/C++ 8 16.12.2009 18:17
Switch с Фибоначчи Клайд Общие вопросы C/C++ 0 20.10.2009 20:16
Switch Division Общие вопросы C/C++ 3 11.01.2009 23:52