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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2015, 14:30   #1
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию С++, ошибки в коде из примера

Код:
TForm1 *Form1;
AnsiString reg[8] = {"Москва","Московская обл.","Санкт-Петербург",
 "Нижний Новгород", "Ленинградская обл.", "Ростов-на-Дону",
 "Самара","Мурманск"};
 float Kt[8] = {1.8,1.6,1.8,1.3,1.1,1.1};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
  int i,n;
  n = sizeof (Kt)/ sizeof (float);
  for (	i = 0; i < n; i++) {
   ComboBox1->Items->Add(reg[i]);
   ComboBox1->OnChange = Change; // E2451 Undefined symbol 'Change'
   ComboBox2->OnChange = Change;
   ComboBox3->OnChange = Change;
   ComboBox4->OnChange = Change;
   Edit1->OnChange = Change;
   Edit2->OnChange = Change;
   Edit3->OnChange = Change;
  }
  int Cb[6][5] = {{1,-1,-1,-1,-1},   
		 {2,-1,-1,-1,-1},
		 {3,1,-1,-1,-1},
		 {4,1,-1,-1,-1},
		 {5,2,1,-1,-1},
		 {6,3,1,-1,-1}};
  float Kb[7] = {2.3,1.55,1.4,1,0.95,0.9};    
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float aTb, aKt, aKb, aKvs, aKo, aKm, aKs;
int  pcb, ccb, nss;

aTb = StrToFloat (Edit3->Text);
aKt = Kt[ComboBox1->ItemIndex];
pcb = StrToInt (Edit1->Text);
nss = StrToInt (Edit2->Text);
ccb = Cb[pcb][nss];    // E2451 Undefined symbol 'Cb'
if (ccb != -1) {
	aKb = Kb[ccb]; // E2451 Undefined symbol 'Kb'
}
else aKb = 2.45;
aKb = Kb[ccb]   ;
switch (ComboBox2->ItemIndex) {
case 0: aKvs = 1.3; break;
case 1: aKvs = 1.2; break;
case 2: aKvs = 1.15; break;
case 3: aKvs = 1.0; break;
}

if (CheckBox1->Checked) {
 aKo = 1.0;
}
else aKo = 1.5;

switch (ComboBox3->ItemIndex) {
case 0: aKm = 0.5; break;
case 1: aKm = 0.7; break;
case 2: aKm = 1.0; break;
case 3: aKm = 1.3; break;
case 4: aKm = 1.5; break;
case 5: aKm = 1.7; break;
case 6: aKm = 1.9; break;
}
switch (ComboBox4->ItemIndex) {
case 0: aKs = 0.7; break;
case 1: aKs = 0.8; break;
case 2: aKs = 0.9; break;
case 3: aKs = 0.95; break;
case 4: aKs = 1.0; break;
}
float T;
AnsiString st;
T = аТЬ * aKt * aKb * aKvs * аКо * aKm *aKs;
st = "Базовая ставка тарифа: " + FloatToStrF (aTb, ffCurrency,5,2) +
"\nКоэф. тарифа: " + FloatToStrF (aKt, ffGeneral,2,2) +
"\nКээф. безаварийности: " + FloatToStrF (aKb,ffGeneral, 2,2) +
"\nКээф. водительского стажа: " + FloatToStrF (aKvs,ffGeneral, 2,2) +
"\nКээф. кол-ва лиц, допущенных к управлению: " + FloatToStrF (aKo,ffGeneral, 2,2) +
"\nКээф. мощности двигателя: " + FloatToStrF (aKm,ffGeneral, 2,2) +
"\nКээф. периода использования ТС: " + FloatToStrF (aKs,ffGeneral, 2,2) +
"\nТариф: " + FloatToStrF (T, ffCurrency,5,2)  ;
ShowMessage(st);
}
//---------------------------------------------------------------------------
 void __fastcall TForm1::Change(TObject *Sender) 
 {  //E2316 '_fastcall TForm1::Change(TObject *)' is not a member of 'TForm1'
 Button1->Enabled = (ComboBoxl->ItemIndex != -1) &&
 (ComboBox2->ItemIndex != -1) &&
 (ComboBox3->ItemIndex != -1) &&
 (ComboBox4->ItemIndex != -1) &&
 (Editl->Text.Length<) != 0) &&
 (Edit2->Text.Length() != 0) &&
 (Edit3->Text.Length() != 0);
 }
Помогите разобраться с кодом, пример взят из книги, но у меня не компилируется.
Использую C++ Builder XE8.
Dima-91 вне форума Ответить с цитированием
Старый 16.07.2015, 14:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Текст ошибки в студию )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2015, 14:36   #3
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Какая ошибка?

З.Ы. Меня опередили.

Последний раз редактировалось Artsiom; 16.07.2015 в 14:36. Причина: ...
Artsiom вне форума Ответить с цитированием
Старый 16.07.2015, 14:38   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Cb и Kb объявлены локально в TForm1::TForm1, поэтому недоступны в TForm1::Button1Click. TForm1::Change нужно вписать в хеадере, где описывается класс TForm1.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.07.2015, 16:17   #5
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Cb и Kb объявлены локально в TForm1::TForm1, поэтому недоступны в TForm1::Button1Click. TForm1::Change нужно вписать в хеадере, где описывается класс TForm1.
Получилось скомпилировать, спасибо за помощь с недочетами попробую справиться сам)

Последний раз редактировалось Dima-91; 16.07.2015 в 16:28.
Dima-91 вне форума Ответить с цитированием
Старый 16.07.2015, 16:43   #6
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Обратите внимание на:
Код:
  int i,n;
  n = sizeof (Kt)/ sizeof (float);
  for (i = 0; i < n; i++) {
   ComboBox1->Items->Add(reg[i]);
   ComboBox1->OnChange = Change;
   ComboBox2->OnChange = Change;
   ComboBox3->OnChange = Change;
   ComboBox4->OnChange = Change;
   Edit1->OnChange = Change;
   Edit2->OnChange = Change;
   Edit3->OnChange = Change;
  }
Тут наверно нужно так:
Код:
  int i,n;
  n = sizeof (Kt)/ sizeof (float);
  ComboBox1->OnChange = Change;
  ComboBox2->OnChange = Change;
  ComboBox3->OnChange = Change;
  ComboBox4->OnChange = Change;
  Edit1->OnChange = Change;
  Edit2->OnChange = Change;
  Edit3->OnChange = Change;  
  for (i = 0; i < n; i++) ComboBox1->Items->Add(reg[i]);
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 16.07.2015, 21:51   #7
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Остался последний вопрос по этому разделу
Код:
 int Cb[6][5] = {{1,-1,-1,-1,-1},   
		 {2,-1,-1,-1,-1},
		 {3,1,-1,-1,-1},
		 {4,1,-1,-1,-1},
		 {5,2,1,-1,-1},
		 {6,3,1,-1,-1}};
//------------------
ccb = Cb[pcb][nss];   
if (ccb != -1) {
	aKb = Kb[ccb]; 
}
else aKb = 2.45;
aKb = Kb[ccb]   ;
aKb не считает в некоторых случаях, хотя если данные как в примере ввести все нормально) Думал что скобочек не хватает в else, но не помогло...
Всем спасибо, может завтра идея придет в голову, наверное массивом Cb[][] не правильно пользуюсь...
Dima-91 вне форума Ответить с цитированием
Старый 16.07.2015, 22:04   #8
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Код:
ccb = Cb[pcb][nss];   
if (ccb != -1) {
	aKb = Kb[ccb]; 
}
else aKb = 2.45;
aKb = Kb[ccb];   //  затирает результат if...else
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 17.07.2015, 08:49   #9
Dima-91
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 198
По умолчанию

Спасибо, Вам, понял.
Dima-91 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибки в коде zaq2000 Помощь студентам 5 08.06.2015 22:44
Ошибки в коде.. arh42kem Windows Forms 10 10.04.2013 18:42
Ошибки в коде C++ BloodWolf Помощь студентам 3 28.11.2012 15:39
C++ ошибки в коде Straiker900 Помощь студентам 0 18.01.2012 19:48
Ошибки в Элементарном коде! Серёга0629 Microsoft Office Excel 22 23.08.2011 13:34