- •В.В. Чуркин
- •Содержание
- •Ознакомление с Интегрированной Средой Разработки (иср)
- •Основное окно иср
- •Библиографический список
- •Занятие 1 Формы и компоненты Включение в проект новой формы
- •Размещение компонентов на форме
- •Депозитарий – хранилище форм и проектов
- •Задание 7. Опробовать режимы заимствования форм из Депозитария
- •Контрольные вопросы
- •Библиографический список
- •Занятие 2 Отладка приложений Компиляция и компоновка проекта
- •Сообщения компилятора и компоновщика
- •Действия в случае ошибки выполнения
- •Дальнейшие действия
- •Окно наблюдения Список Часов
- •Окно оценки и модификации Оценить|Изменить
- •Пошаговое выполнение приложения
- •Точки прерывания
- •Использование окна Инспектора Отладки
- •Другие средства отладки
- •Контрольные вопросы
- •Библиографический список
- •Занятие 3 Компоненты ввода и отображения текстовой информации
- •Компоненты Label, StaticText, Panel
- •Компоненты Edit, LabeledEdit, MaskEdit
- •Компоненты Memo, RichEdit
- •Компоненты ListBox, CheckListBox, ValueListEditor
- •Компонент StringGrid
- •Контрольные вопросы
- •Библиографический список
- •Занятие 4 Диаграммы и графики Компонент Chart
- •Компонент Image
- •Контрольные вопросы
- •Библиографический список
- •Контрольные вопросы
- •Библиографический список
- •Формирование квадратных матриц
- •Контрольные вопросы
- •Библиографический список
- •Кнопки, индикаторы, управляющие элементы
- •Управляющие кнопки Button и BitBtn
- •Кнопка с фиксацией SpeedButton
- •Группы радиокнопок − компоненты RadioGroup, RadioButton и GroupBox
- •Индикаторы CheckBox и CheckListBox
- •Ползунки и полосы прокрутки − компоненты TrackBar и ScrollBar
- •Заголовки − компоненты HeaderControl и Header
- •Таймер − компонент Timer
- •Календарь − компонент DateTimePicker
- •Панели и компоненты внешнего оформления
- •Панели общего назначения − компоненты Panel,
- •Многостраничные панели − компоненты TabControl,
- •Инструментальные панели − компоненты ToolBar и PageScroller
- •Перестраиваемые панели − компоненты CoolBar и ControlBar
- •Контрольные вопросы
- •Библиографический список
- •Занятие 8 Системные диалоги
- •Диалоги открытия и сохранения файлов – компоненты
- •Фрагменты диалогов – компоненты
- •Диалог выбора шрифта – компонент FontDialog
- •Диалоги выбора цвета – компоненты ColorDialog, ColorBox
- •Контрольные вопросы
- •Библиографический список
- •Занятие 9 Технология разработки приложений. Диспетчеризация действий
- •Диспетчеризация действий на основе компонента ActionList
- •Диспетчеризация действий на основе компонентов ActionManager, ActionMainMenuBar, ActionToolBar, CustomizeDlg
- •Контрольные вопросы
- •Библиографический список
- •Занятие 10 Динамически присоединяемые библиотеки dll Назначение dll
- •Статическое и динамическое связывание dll с приложением
- •Создание dll
- •Примеры статического и динамического связывания dll
- •Контрольные вопросы
- •Библиографический список
Сообщения компилятора и компоновщика
На примере простого приложения с ошибочными операторами выясним какие сообщения об ошибках и какие предупреждения выдает компилятор Начните новое приложение перенесите на форму метку Label и кнопку Button В обработчик щелчка кнопки введите следующие операторы:
void _fastcall TForm1::Button1Click(Tobject *Sender)
{
int i,j;
double A;
for(i=0; i<50;i++)
A*=10000; //Увеличение A в 10000 раз
Label1->Caption = “A = “ +B;
}
Установите режим наиболее удобный для отладки при котором компилятор отображает все свои замечания Для этого в окне опций проекта вызываемом командой Проект|Опции на странице Компилятор в группе опций Предупреждения нужно включить опцию Все. Затем выполните команду Запуск|Запустить или нажмите соответствующую быструю кнопку или нажмите клавишу F9.
Внизу окна Редактора Кода появятся сообщения о замечаниях и ошибках Первое сообщение:
[C++ Warning] Unit1.cpp (23): W8013 Possible use of ‘A’ before definition
([C++ Предупреждение] модуль Unit1.cpp строка 23: W8013 Переменная ‘A’ возможно используется до того как ей присвоено значение)
Это предупреждение о том что переменная A не инициализирована и ее значение к моменту первого выполнения оператора в строке 23 не определено Чтобы узнать что это за строка нужно дважды щелкнуть на этом предупреждении В окне Редактора Кода выделится соответствующая строка:
A*=10000; //Увеличение A в 10000 раз
Следовательно объявление переменной нужно изменить так:
double A=1;
Чтобы в переменной A накапливался результат при каждом щелчке на кнопке сделаем ее глобальной
Перейдем к второму сообщению компилятора:
[C++ Error] Unit1.cpp (24) : E2451 Undefined symbol ‘B’
([C++ Ошибка] модуль Unit1.cpp строка 24: E2451 Необъявленный идентификатор ‘B’)
Это уже сообщение об ошибке
+В операторе
Label1->Caption = “A = “ +B;
вместо переменной A указана переменная B которая не была объявлена Строка кода с этой ошибкой выделена в окне Редактора Кода, и курсор остановился около необъявленного идентификатора
Поскольку ошибка неисправима выполняемый модуль не формируется и приложение не выполняется
Третье сообщение компилятора:
[C++ Warning] Unit1.cpp (25): W8080 ‘j’ is declared but never used
([C++ Предупреждение] модуль Unit1.cpp строка 25: W8080 Переменная ‘j’ объявлена но нигде не используется)
Объявление переменной j как ненужной нужно удалить из текста
Последнее сообщение компилятора:
[C++ Warning] Unit1.cpp (25): W8057 Parameter ‘Sender’ is never used
([C++ Предупреждение] модуль Unit1.cpp строка 25: W8057 Параметр ‘Sender’ нигде не используется)
Параметр Sender передается в обработчик событий и является компонентом в котором произошло событие В данном обработчике он не нужен поэтому это предупреждение можно игнорировать
Итак приложение не откомпилировалось из-за ошибки с использованием необъявленной переменной B
После исправления в ошибочном операторе переменной B на A появится новое сообщение об ошибке:
[C++ Error] Unit1.cpp (24) : E2060 Illegal use of floating point
([C++ Ошибка] модуль Unit1.cpp строка 24: E2060 Недопустимое использование плавающей точки)
В правой части оператора Label1->Caption = “A = “ +A;
складываются строка “A = “ и переменная с плавающей точкой A Это ошибка использования несовместимых типов
После всех исправлений код примет вид
double A=1;
void _fastcall TForm1::Button1Click(Tobject *Sender)
{
int i;
for(i=0; i<50;i++)
A*=10000; //Увеличение A в 10000 раз
Label1->Caption = “A = “ + FloatToStr(A);
}
Теперь откомпилируем приложение и выполним его