Test3R |
Отправлено: 02.02.2007, 12:33 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 46
|
Значения переменных должны определиться в главной форме по нажитию на кнопку Button2. При нажатии на кнопку Button3 должен произвестись расчёт. Переменные должны иметь положительные значения после нажатия на кнопку Button2. Но, видимо, они берутся не с главной формы (где они положительные), а из юнита классов, где их значения не определены.
Как сделать, чтоб значения переменных брались из главной формы?
|
|
Test3R |
Отправлено: 02.02.2007, 12:46 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 46
|
Добавлю, что при расчёте (кнопка Button1) возникает ошибка деления на 0, хотя в главной форме переменные определены положительно, вывод — они берутся из юнита классов.
Как сделать, чтоб значения переменных при расчёте брались из главной формы? |
|
olegenty |
Отправлено: 02.02.2007, 13:21 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
как вариант — сделать их членами класса-формы и обратиться соответствующим образом.
|
|
Test3R |
Отправлено: 02.02.2007, 14:33 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 46
|
Ок. Но просто в разработке проги могут добавиться ещё формы, из которых будут меняться переменные моего класса. Так что хотелось бы ещё услышать варианты. |
|
AVC |
Отправлено: 02.02.2007, 15:14 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (Test3R @ 02.02.2007, 13:33) | Так что хотелось бы ещё услышать варианты. |
Использование глобальных переменных увеличивает шанс появления ошибок из-за возростания трудноотслеживаемых неявных связей, возможно с "побочными" эффектами.
В крайнем случае можно инкапсулировать их в отдельный класс с четко оговоренными правилами их использования. |
|
Test3R |
Отправлено: 02.02.2007, 16:05 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 46
|
QUOTE | Использование глобальных переменных увеличивает шанс появления ошибок из-за возростания трудноотслеживаемых неявных связей, возможно с "побочными" эффектами.
В крайнем случае можно инкапсулировать их в отдельный класс с четко оговоренными правилами их использования. |
Из вашего сообщения почти ничего не понял. Что значит "инкапсулировать их в отдельный класс" и как это сделать? |
|
nawok78 |
Отправлено: 02.02.2007, 17:24 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 115
|
есть такое понятие как область значений (или видимости) — пусть меня поправят — смысл в том что в разных областях можно объявить одинаковые переменные , апотом обращаться к ним
a::Var или b::Var
а так сделай эти переменные не глобальными в к-м либо юните, а полями формы (если не нужно чтоб для каждого экз-ра формы они были едины). потом в подключай ашник главной формы в другом сишнике и обрашайся к переменной :
FMain->Var
|
|
aquanet sk |
Отправлено: 03.02.2007, 00:56 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 87
|
на счет последнего сообщени смогу пояснить, если не врубишься. |
|
Test3R |
Отправлено: 03.02.2007, 12:11 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 46
|
2nawok78
Спасиб конечно, но не понял, где надо объявлять переменную. В каком файле в моём случае.
2aquanet sk
Ты прям как знал, что я не пойму, что делать. Мож аська есть?
Если нету, то объясни для моего случая, чтоб нагляднее было мне.
Вот переменные принимают значения при нажатии на Button2:
Parameters.AttKick = 50;
Parameters.AttDexterity = 60;
Parameters.AttGoodLuck = 30;
Parameters.AttHealth = 10;
Parameters.AttHP = 5000;
Parameters.AttPower = 30;
Parameters.DefKick = 50;
Parameters.DefDexterity = 30;
Parameters.DefGoodLuck = 60;
Parameters.DefHealth = 10;
Parameters.DefHP = 5000;
Parameters.DefPower= 30;
Как и где именно мне их надо объявить, чтобы при расчёте в ClassesUnit.cpp они брались из главной формы.
И как к ним надо обращаться и в главном cpp, и в ClassesUnit.cpp? Так — Parameters.DefPower или Parameters->DefPower? |
|
beginner |
Отправлено: 03.02.2007, 13:26 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 44
|
Классы спроектированы на редкость неудачно.
Лучше бы переделать. Хотя бы тип Parameters в TChances
изменить на TParameters*.
А чтоб эта версия работала нужно
1. Изменить тип TParameters Parameters; в NLUNit.h на
TParameters *Parameters;
2. после randomize() в TForm1::TForm1 написать
Parameters = &Move.Parameters;
3. C помощью редактора заменить в NLUnit.cpp все
Parameters.
на
Parameters->
4. В конец TForm1::Button2Click написать
Move.Chances.Parameters = Move.Parameters;
Но лучше перепроектировать класс. |
|
Test3R |
Отправлено: 03.02.2007, 13:59 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 46
|
2beginner
Спасиб. Подскажите, как перепроектировать классы мои, чтоб было удачно? Хотелось бы про все классы услышать. |
|
Test3R |
Отправлено: 04.02.2007, 12:20 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 46
|
И всё-таки, как лучше перепроектировать классы мои? |
|
nawok78 |
Отправлено: 05.02.2007, 10:58 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 115
|
QUOTE |
И как к ним надо обращаться и в главном cpp, и в ClassesUnit.cpp? Так — Parameters.DefPower или Parameters->DefPower?
|
Parameters.DefPower — если Parameters — статическая переменная
Parameters->DefPower- если Parameters — динамическая переменная (указатель)
|
|