Для управляемой косвенно двунаправленной очереди на основе
двусвязанного списка реализует итератор объектов. Элементы см. в
TMDoubleListIteratorImp.
Реализует управляемую двунаправленную очередь косвенных объектов T, используя в качестве основы реализации вектор.
Для управляемой косвенной двунаправленной очереди на основе
вектора реализует итератор объектов. Элементы см. в TMDequeAsVectorIterator.
Используя в качестве основы хеш-таблицу и заданное пользователем распределение A реализует управляемый косвенный словарь.
Подразумевается, что T - это один из четырех ассоциативных типов.
Реализует итератор, который выполняет перебор по объектам
TMIDictionaryAsHashTable, используя заданное пользователем средство распределения памяти.
Реализует управляемый двусвязанный список указателей на объекты типа T. Предполагается, что T имеет операцию копирования и заданный по умолчанию конструктор. Обрабатывает любые типы объектов.
Реализует итератор двусвязанного списка. Этот итератор работает с любыми непосредственными двунаправленными списками. Функции-элементы см. в TMDoubleListIteratorImp.
Используя заданный пользователем распределитель памяти Alloc, реализует управляемую хеш-таблицу объектов типа T. Предполагается, что T имеет операцию ==, операцию копирования и заданный по умолчанию конструктор.
Реализует итератор для перебора контейнеров TMIHashTableImp.
Реализует управляемую ассоциацию, связывая косвенный ключ K
с косвенным значением L. Предполагается, что K имеет функцию-элемент HashValue, или что существует глобальная функция со следующим прототипом:
unsigned HashValue( K & );
K должно также иметь допустимую операцию ==. Класс A представляет администратор хранения, заданный пользователем.
Реализует управляемый список указателей на объекты типа T.
Так как указатели всегда имеют операцию копирования, этот класс
может обрабатывать любой тип объектов.
Реализует итератор списка, работающий с любым косвенным управляемым списком. Функции-элементы см. в TMListIteratorImp.
Реализует управляемую косвенную очередь объектов типа T, используя в качестве основы реализации двусвязанный список.
Реализует итератор для косвенных очередей, построенных на
основе списка. Функции-элементы см. в TMIDequeueAsVectorIterator.
Реализует управляемую очередь из указателей на объекты типа
T, используя в качестве основы реализации вектор.
Реализует итератор для управляемых косвенных очередей, построенных на основе списка.
Реализует управляемый косвенный отсортированный массив объектов типа T, используя в качестве основы реализации вектор.
Функции-элементы см. в TMIArrayAsVector.
Реализует управляемый отсортированный двусвязанный список
указателей на объекты типа T. Обрабатывает любые типы объектов.
Наследует функции-элементы TMIDoubleListImp.
Реализует итератор двусвязанного списка. Этот итератор работает с любыми косвенными отсортированными двунаправленными списками. Функции-элементы см. в TMIDoubleListIteratorImp.
Реализует управляемую очередь указателей на объекты типа T,
используя в качестве основы реализации вектор. Для управления памятью используется TStandsardAllocator. См. также функции-элементы в TMIBagAsVector.
Реализует итератор для перебора объектов TMISetAsVector.
Функции-элементы см. в TMIArrayAsVectorIterator.
Реализует управляемый отсортированный список указателей на
объекты типа T. Так как указатели всегда имеют операцию копирования, этот класс может обрабатывать любой тип объектов. Функции-элементы см. в TMIListImp.
Реализует итератор списка, работающий с любым управляемым
косвенным списком. Функции-элементы см. в TMListIteratorImp.
Реализует итератор списка, работающий с любым косвенным
списком. Функции-элементы см. в TMIListIteratorImp.
Реализует управляемый стек указателей на объекты типа T, используя в качестве основы реализации список. Функции-элементы см.
в TMIStackAsVector.
Реализует итератор для управляемых стеков, построенных на
основе вектора. Функции-элементы см. в TMIListIteratorImp.
Реализует управляемый стек указателей на объекты типа T, используя в качестве основы реализации вектор.
Реализует итератор для управляемых косвенных стеков, построенных на основе вектора. Функции-элементы см. в TMVectorIteratorImp.
Реализует управляемый отсортированный вектор указателей на
объекты типа T. Предполагается, что указатели всегда имеют операцию копирования, поэтому данный класс может работать с любым типом объектов. Функции-элементы см. в TMICVectorIteratorImp.
Реализует итератор вектора, работающий с косвенным управляемым и отсортированным вектором объектов типа T. Функции-элементы
см. в TMIVectorIteratorImp.
Реализует управляемый вектор указателей на объекты типа T.
Предполагается, что указатели всегда имеют операцию копирования,
поэтому данный класс может работать с любым типом объектов.
Реализует итератор вектора, работающий с косвенным управляемым вектором.
Определяет узлы TMListImp, TMIListImp и родственных классов.
Реализует управляемый список объектов типа T. Предполагается, что T имеет операцию копирования и заданный по умолчанию конструктор.
Реализует список объектов типа T. Предполагается, что T имеет операцию копирования и заданный по умолчанию конструктор.
Реализует итератор списка, работающий с непосредственным
управляемым списком.
Реализует управляемую очередь объектов типа T, используя в
качестве основы реализации двусвязанный список. Функции-элементы
см. в TMDequeueAsDoubleList.
Реализует итератор для очередей, построенных на основе списка. Функции-элементы см. в TMDequeueAsVectorIterator.
Реализует управляемую очередь объектов типа T, используя в
качестве основы реализации вектор. Предполагается, что T имеет
операцию копирования, операцию < и заданный по умолчанию конструктор.
Реализует итератор для управляемых очередей, построенных на
основе списка. Функции-элементы см. в TMDequeueAsVectorIterator.
Реализует отсортированный массив объектов типа T, используя
в качестве основы реализации вектор. За исключением AddAt все
функции-элементы наследуются из TMArrayAsVector.
Реализует объект итератора для перебора объектов TMSArrayAsVector. Элементы и операции см. в TMArrayAsVectorIterator.
Реализует управляемый двусвязанный список объектов типа T.
Предполагается, что T имеет операцию ==, операцию < и заданный по
умолчанию конструктор. Функции-элементы см. в TMDoubleListIteratorImp.
Реализует итератор двусвязанного списка. Этот итератор работает с непосредственными двунаправленными списками. Функции-элементы см. в TMDoubleListIteratorImp.
Реализует управляемую очередь объектов типа T, используя в
качестве основы реализации вектор. В отличие от мультимножества,
множество не может содержать дублируемых элементов. Кроме перечисленных ниже функций-элементов, TMSetAsVector наследует функции-элементы из TMBagAsVector. См. также функции-элементы в TMBagAsVector.
Реализует итератор для перебора объектов TMSetAsVector.
Функции-элементы см. в TMArrayAsVectorIterator.
Реализует управляемый отсортированный список объектов типа
T. Предполагается, что T имеет операцию копирования, операцию < и
заданный по умолчанию конструктор.
Реализует итератор списка, работающий с непосредственным
управляемым отсортированным списком. Функции-элементы см. в
TMListIteratorImp.
Реализует управляемый стек объектов типа T, используя в качестве основы реализации список. Функции-элементы см. в TMStackAsVector.
Реализует итератор для управляемых стеков, построенных на
основе вектора. Функции-элементы см. в TMListIteratorImp.
Реализует итератор для управляемых стеков, построенных на
основе вектора. Функции-элементы см. в TMVectorIteratorImp.
Реализует управляемый отсортированный вектор объектов типа
T. Предполагается, что T имеет операцию копирования и используемый по умолчанию конструктор. Функции-элементы см. в TMCVectorImp.
Реализует итератор вектора, работающий с непосредственным
отсортированным и управляемым вектором объектов типа T. Функции-элементы см. в TMVectorIteratorImp.
Реализует обслуживаемый вектор объектов типа T. TMVectorImp
предполагает, что T имеет операцию копирования и используемый по
умолчанию конструктор.
Реализует итератор вектора, работающий с непосредственным
управляемым вектором объектов типа T.
Реализует очередь объектов типа T, используя в качестве основы реализации двусвязанный список. Функции-элементы см. в TMQueueAsDoubleList.
Реализует итератор для очередей, построенных на основе списка. Функции-элементы см. в TMDequeueAsDoubleListIterator.
Реализует итератор для очередей, построенных на основе списка. Функции-элементы см. в TMDequeueAsVectorIterator.
Реализует отсортированный массив объектов типа T, используя
в качестве основы реализации вектор. За исключением AddAt все
функции-элементы наследуются из TMArrayAsVector.
Реализует объект итератора для перебора объектов TSArrayAsVector. Элементы и операции см. в TMArrayAsVectorIterator.
Реализует отсортированный двусвязанный список объектов типа
T. Предполагается, что T имеет операцию ==, операцию < и заданный
по умолчанию конструктор. Функции-элементы см. в TMSDoubleListIteratorImp.
Реализует итератор двусвязанного списка. Этот итератор работает с любыми непосредственными двунаправленными списками. Функции-элементы см. в TMDoubleListIteratorImp.
Реализует множества объектов типа T, используя в качестве
основы реализации вектор. Для управления памятью используется
TStandsardAllocator. См. также функции-элементы в TMBagAsVector.
Реализует итератор для перебора объектов TSetAsVector. Функции-элементы см. в TMArrayAsVectorIterator.
Используя для распределения памяти TStandardAllocator, реализует отсортированный список объектов типа T. Предполагается,
что T имеет операцию копирования, операцию < и заданный по умолчанию конструктор. Функции-элементы см. в TMListImp.
Реализует итератор списка, работающий с непосредственным от-
сортированным списком. Функции-элементы см. в TMListIteratorImp.
Реализует управляемый стек объектов типа T, используя в качестве основы реализации список. Функции-элементы см. в TMStackAsVector.
Реализует итератор для управляемых стеков, построенных на
основе вектора. Функции-элементы см. в TMVectorIteratorImp.
Реализует управляемый стек объектов типа T, используя в качестве основы реализации вектор.
Реализует стек объектов типа T, используя в качестве основы
реализации вектор, а для управления памятью - TStandardAllocator.
Реализует итератор для стеков, построенных на основе вектора. Функции-элементы см. в TMVectorIteratorImp.
Реализует отсортированный вектор объектов типа T. Предполагается, что T имеет операцию копирования и используемый по умолчанию конструктор. Функции-элементы см. в TMCVectorImp.
Реализует итератор вектора, работающий с непосредственным
отсортированным вектором объектов типа T. Функции-элементы см. в
TMVectorIteratorImp.
Реализует управляемый вектор объектов типа T. TVectorImp
предполагает, что T имеет операцию копирования и используемый по
умолчанию конструктор. Функции-элементы см. в TMVectorImp.
Реализует итератор вектора, работающий с непосредственным
управляемым вектором объектов типа T. Функции-элементы см. в
TMVectorIteratorImp.
Шаблоны документа объединяют вместе классы документа и классы отображаемого элемента, создавая новый класс. Администратор
документа поддерживает список шаблонов документа, который используется при создании нового экземпляра Doc/View. Ниже поясняется,
как создавать и использовать шаблоны документов.
C++ - это Си с классами. Borland C++ - это версия фирмы Borland
языка С++, разработанного Брайоном Страуструпом из фирмы AT&T, как
расширение языка Си.
В целом язык С++ является надмножеством языка Си. Это означает,
что программы Си можно компилировать в среде С++, однако компилировать программы С++ в среде Си, при наличии в них каких-либо специфических для С++ конструкций, нельзя. Некоторые ошибочные ситуации возникают из-за различий этих двух родственных языков. Так, одна и та же
функция, дважды объявленная в Си с различными значениями аргументов,
вызовет ошибку повторения имен. Однако, в С++ допустимо это или нет,
зависит от других обстоятельств.
Главная возможность C++ - это классы, которые позволяют "упрятывать" функции и данные в отдельные конструкции. Отдельные конструкции называются объектами, а программирование с использованием объектов называют объектно-ориентированным программированием (ООП).
Почему бы не рассмотреть каков Турбо и Borland С++ немедленно?
Вот наша первая программа:
#include <stdio.h>
main()
{
int i, j;
i = 25; j = 17;
printf("Итого: %d\n", i+j);
return 0;
}
Сюрприз! В этой программе вы не увидели никаких отличий от программирования на Си. Чудесно! Это вселяет оптимизм, так как программы,
написанные на языке Си, можно компилировать в Турбо и Borland C++.
Зато Borland C++ имеет многочисленные расширения.
Указание комментариев
v
#include <iostream.h> // Новая библиотека потоков
// ввода-вывода
class sber_bank { // Новый способ создавать структуры
int memory_bank; // с данными и функциями.
public:
void add(int a, int b) { // Встроенная функция
memory_bank = a + b; // Сохранение данных в объекте
cout << "Итог: "; // Новый способ ввода-вывода
cout << memory_bank;
}; ^
}; Операция вывода потока
main()
{
sber_bank deep_thought; // Создание объекта и
deep_thought.add(25, 17); // обращение к нему
}
В общем случае семантика С++ намного более сложная по сравнению
с Си, однако, это ведет к большей надежности и заставляет программистов быть более "дисциплинированными".
Символическая цель вынуждает MAKE строить в формирующем файле несколько целей (вам не нужно будет полагаться на сцепленные
зависимости). В строке зависимости перечисляются все цели, которые вы хотите построить. Никаких команд для символических целей
указывать не нужно.
Например, в следующем формирующем файле символические цели
Files строятся из FILE1.EXE и FILE2.EXE.
Files: file1.exe file2.exe #Эта цель не имеет команд
file1.exe: file1.obj
bcc file1.obj
file2.exe: file2.obj
bcc file2.obj
Для символических целей действуют следующие правила:
Символические цели не требуют командной строки.
Символической цели нужно давать уникальное имя (оно не может быть именем файла в текущем каталоге).
Именует символические цели согласно с правилами операционной системы.
Явное правило - это правило, которое явным образом задает
полные имена файлов. Явные правила имеют следующий вид:
целевой_файл[целевой_файл]...:[{маршрут}][исходный_файл...]
[команда]
.
.
.
Здесь "целевой_файл" представляет собой файл, который должен
быть обновлен, "исходный_файл" представляет собой файл, от которой зависит файл "целевой_файл", а "команда" представляет собой
любую команду, допустимую в DOS (включая вызовы .BAT файлов и выполнение .EXE и .COM файлов).
Явные правила определяют одно или несколько имен результирующих файлов, ноль или более исходных файлов, а также необязательный перечень команд, которые должны быть выполнены. Имена результирующего (целевого) и исходного файлов, указываемые в явных правилах, могут содержать обычные спецификации дисковода и каталога,
допустимые в DOS, а также содержать трафаретные символы.
Обязательны для соблюдения следующие указанные ниже синтаксические правила:
"Целевой_файл" должен начинаться с самого начала строки (в
столбце 1);
Исходному файлу (файлам) "исходный_файл" должны предшествовать по меньшей мере один символ пробела или табуляции,
расположенные после двоеточия;
Каждая "команда" должна начинаться со структурного отступа
(ей должен предшествовать по меньшей мере один символ пробела или табуляции). Как было отмечено ранее, если список
исходных файлов или заданная команда не могут уместиться
на одной строке, то в качестве символа продолжения строки
может использоваться обратная косая черта.
Наличие как имен исходных файлов, так и команд является необязательным; возможно существование явных правил, которые состоят
только из строки целевой_файл[целевой_файл...], за которой следует символ двоеточия.
Идея использования явного правила заключается в том, что команда или перечень команд будут осуществлять создание или обновление результирующего файла целевой_файл как правило на основе
исходного файла "исходный_файл". Когда утилита MAKE обнаруживает
Как явные, так и неявные правила (описываемые ниже) могут
содержать списки команд. Команды в списке команд подчиняются следующим синтаксическим правилам:
[префикс...]тело_команды
Каждая команда в списке команд состоит из (необязательного)
списка префиксов, за которым следует тело единственной команды.
Утилита MAKE позволяет на ряду с явными правилами задавать
неявные правила. Неявные правила представляют собой обобщение явных правил; они применяются ко всем файлам, которые имеют соответствующие расширения имен файлов.
Ниже приводится пример, который иллюстрирует отношение между
двумя правилами. Рассмотрим явное правило из предыдущего примера.
Данное правило является типичным, поскольку оно следует общему
принципу: объектный файл(с расширением имени .OBJ) зависит от
файла с тем же основным именем и расширением .C и создается путем
выполнения программы BCC. Фактически, можно создать формирующий
файл для утилиты MAKE, который будет содержать несколько(или
несколько десятков) явных правил, соответствующих одному и тому
же формату.
Переписывая явное правило в виде неявного правила, вы можете
убрать все явные правила, которые подчиняются одинаковому форма ту. Неявное правило будет иметь следующий вид:
.c.obj:
BCC -c $<
Это правило означает следующее: "Любой файл с расширением .C
может быть оттранслирован в файл с тем же основным именем и расширением .OBJ с помощью следующей последовательности команд".
Создание файла .OBJ происходит с помощью второй строки этого правила, где $< означает имя файла с расширением, присущим исходному
файлу (.C). (Символ $< представляет макрокоманду особого вида.
Объяснение макрокоманд приводится далее. Макрокоманда $< при каждом выполнении команды будет заменена полным именем соответствующего исходного файла .C).
Идентификатор $< представляет собой специальную макрокоманду. Макрокоманды обсуждаются ниже. Макрокоманда $< при каждом выполнении команды будет заменяться полными именем соответствующего
исходного файла .С.
Ниже приводится синтаксис неявного правила:
[{исходный_каталог}].исх_расшир.[{целевой_каталог}]цел_расшир:
[команда]
...
Как и ранее, использование команды является необязательным.
Если команда используется, то перед ней должны стоять один или
несколько символов пробелов.
Чтобы включить в код Си/С++ инструкции ассемблера, используйте ключевое слово asm и следующий формат:
asm код_операции операнды;
где "код_операции" - допустимая инструкция процессора 80х86,
"операнды" содержат операнды (операнд), допустимые для указанной
операции (константы, переменные и метки). Концом оператора asm
является символ ; или новая строка. После точки с запятой на той
же строке может размещаться новый оператор asm, но на следующей
строке оператор продолжаться не может. Для включения нескольких
операторов asm их можно заключить в фигурные скобки (первая скобка должна быть на той же строке, что и asm):
asm {
pop ax; pop ds
iret
}
Точки с запятой для комментария здесь не используются (как в
TASM). При комментировании таких операторов применяйте стандартные комментарии Си. Ассемблерная часть оператора копируется непосредственно в вывод и включаются в операторы языка ассемблера,
которые Borland С++ генерирует для инструкций Си и С++. Все идентификаторы Си заменяются на соответствующие эквиваленты ассемблера. Каждый оператор asm рассматривается как оператор Си.
Оператор asm может использоваться в функции или как внешнее
описание вне функции. Оператор asm, размещенные внутри функции,
помещаются в сегмент кода, а операторы asm вне функции - в сегмент данных.
| WM_COMPACTING | WM_QUEUESYNC |
| WM_DEVMODECHANGE | WM_SPOOLERSTATUS |
| WM_ENTERIDLE | WM_SYSCOLORCHANGE |
| WM_FONTCHANGE | WM_SYSCOMMAND |
| WM_NULL | WM_TIMECHANGE |
| WM_PALETTECHANGED | WM_WININICHANGE |
| WM_PALETTEISCHANGING | WM_POWER |
При порождении потомка класса у вас есть выбор в определении типа элементов. По умолчанию элементы базового класса автоматически получают приватный тип, если только вы не захотите иначе. Использование
же ключевого слова public, при порождении потомка класса, делает все
элементы базового класса общими в порожденном классе. Приватные элементы базового класса остаются приватными, и не будут доступны из потомков. Вот где требуются защищенные элементы (protect).
Замечание. Если вы хотите использовать в потомке класса элементы базового класса, то они должны быть объявлены как защищенные
или общие. Доступ к приватным элементам базового класса
невозможен никак иначе, как из их приватных функций элементов или с помощью дружественных функций, объявленных
как friend.
В приведенной ниже таблице показана доступность элементов базового класса для его потомка (в зависимости от определенного типа
доступа в базовом классе и потомке):
Тип доступа в Тип доступа Доступность элеме-
базовом классе в потомке нта базового класса
приватный приватный недоступен
защищенный приватный приватный
общий приватный приватный
приватный общий недоступен
защищенный общий защищенный
общий общий общий
По мере изучения материала вы познакомитесь с многочисленными
примерами использования управления доступом.
Простейшим видом генерируемой распечатки является копия окна
(оконные объекты состоят из одной страницы и знают, как отображаться в контексте устройства). Чтобы создать объект распечатки
окна, постройте объект и передайте строку заголовка и указатель
на нужное окно.
Часто требуется, чтобы окно создавало распечатку в ответ на
команду меню. Пример вы найдете в программе PRINTING.CPP.
В справочнике по функциям Borland С++ приняты следующие соглашения:
в левой части заголовочной строки указано имя функции, а в
правой - ее назначение;
следующая строка содержит синтаксис функции, из которого
также видно в каком заголовочном файле (.h) содержится
прототип данной функции.
Вот так, примерно, выглядит описание функции:
Имя_функции Назначение. Краткое изложение действий, выпол-
няемых функцией.
DOS UNIX Win16
OS/2 Win32
ANSI C++ ANSI C Синтаксис #include <имя_заголовка.h>
В этой части перечисляются файлы заголовков,
содержащие прототип функции или описания констант, перечисляемых типов и т.д. (т.е. то, что
использует данная функция).
имя_функции(параметр[,...]);
Подобная запись описывает синтаксис функции.
Расшифровка значков-пpедупpеждений под
именем функции:
| DOS | Функция позволяет pаботать в DOS |
| Win16 | Функция позволяет pаботать в 16-pазpядном Windous |
| Win32 | Функция позволяет pаботать в 32-pазpядном Windous |
| OS/2 | Функция позволяет pаботать в OS/2 |
| ANSI C | Функция позволяет pаботать в aNsI C |
| ANSI C++ | Функция позволяет pаботать в aNsI C++ |
| UNIX | Функция позволяет pаботать в UNIX |
| WM_ASKCBFORMATNAME | WM_PASTE |
| WM_CHANGECBCHAIN | WM_PAINTCLIPBOARD |
| WM_CLEAR | WM_RENDERALLFORMATS |
| WM_CUT | WM_RENDERFORMAT |
| WM_COPY | WM_SIZECLIPBOARD |
| WM_DESTROYCLIPBOARD | WM_UNDO |
| WM_DRAWCLIPBOARD | WM_VSCROLLCLIPBOARD |
| WM_HSCROLLCLIPBOARD |
| WM_DDE_ACK | WM_DDE_POKE |
| WM_DDE_ADVICE | WM_DDE_REQUEST |
| WM_DDE_DATA | WM_DDE_TERMINATE |
| WM_DDE_EXECUTE | WM_DDE_UNADVISE |
| WM_DDE_INITIATE |
| Error 0 Ошибка 0 | Invalid data Неверные данные |
| Invalid function number Неверный номер функции | No such device Такого устройства нет |
| No such file or directory Такого файла или каталоге нет | Attempt to remove current directory Попытка удалить текущий каталог |
| Path not found Путь не найден | Not same device Другое устройство |
| Too many open files Слишком много открытых файлов | No more files Файлов больше нет |
| Permission denied Разрешение не дано | Invalid argument Неверный аргумент |
| Bad file number Неверный номер файла | Arg list too big Список аргументов слишком велик |
| Memory arena trashed Испорчена память | Exec format error Ошибка формата запуска |
| Not enough memory Недостаточно памяти | Cross-device link Кросс-компоновка устройств |
| Invalid memory block address Неверный адрес блока памяти | Math argument Математический аргумент |
| Invalid environment Неверная операционная среда | Result too large Результат слишком велик |
| Invalid format Неверный формат | File already exists Файл уже существует |
| Invalid access code Неверный код доступа |
| Bad address | Неверный адрес |
| Block device required | Требуется блочное устройство |
| Broken pipe | Нарушение конвейера |
| Executable file in use | Выполняемый файл используется |
| File too large | Файл слишком велик |
| Illegal seek | Недопустимая установка |
| Inapropriate I/O control operation | Неподходящая операция управле ния вводом-выводом |
| Input/output error | Ошибка ввода-вывода |
| Interrupted function call | Прерванный вызов функции |
| Is a directory | Является каталогом |
| Name too long | Слишком длинное имя |
| No child processes | Нет дочерних процессов |
| No space left in device | На устройстве не осталось места |
| No such device or address | Нет такого адреса или устройства |
| No such process | Нет такого процесса |
| Not a directory | Не является каталогом |
| Operation not permitted | Операция не разрешена |
| Possible deadlock | Возможен клинч |
| Read-only file system | Файловая система доступна только по чтению |
| Resource busy | Ресурс занят |
| Resource temporary | Ресурс временно недоступен unavailable |
| Too manu links | Слишком много связей |
| WM_INITDIALOG | WM_INITMENUPOPUP |
| WM_INITMENU |
Компилятор справочников выводит на экран сообщение, когда в процессе построения файла ресурсов обнаруживается та или иная ошибка. Ошибки, обнаруживаемые при обработке файла описания проекта, имеют коды, начинающиеся с префикса P, а соответствующие сообщения выглядят следующим образом:
Error P1025: line...7 of filename.HPJ : Section heading sectionname unrecognized.
Warning P1039: line...38 of filename.HPJ : [BUILDTAGS] section missed.
Ошибки, обнаруживаемые при обработке информационных файлов (.RTF), имеют коды, начинающиеся с префикса R, а соответствующие сообщения выглядят следующим образом:
Error R2025 : File environment error. Warning R2501 : Using old-key phrase table.
Если это возможно, компилятор сообщает номер статьи и/или имя информационного файла, где обнаружена ошибка. Номер статьи, сообщаемый компилятором, представляет собой ее порядковый номер в файле .RTF (первая, вторая и т.д.). Эти номера могут совпадать с номером страницы, показываемым текстовым процессором, в зависимости от того, какую длину гипотетической страницы (в строках) вы установили. Напомним, что статьи в информационных файлах отделяются знаком "конец страницы", хотя в справочной системе понятие "страница" не используется.
Сообщения, начинающиеся со слова Error (Ошибка) соответствуют серьезным (фатальным) ошибкам. Сообщения о таких ошибках выводятся на экран всегда и при их возникновении построение справочного файла не производится. Сообщения, начинающиеся с Warning (Предупреждение), связаны с менее серьезными ошибками. При наличии ошибок только второго типа, процесс компиляции проходит до конца и создается соответствующий справочный файл, который может быть использован в рамках системы интерактивной документации Windows. Однако при этом справочник Help может функционировать не совсем так, как задумывалось разработчиком. Количество предупредительных сообщений, выводимых компилятором на экран, может регулироваться пользователем.
При обработке файла описания проекта компилятор игнорирует ошибочные строки и пытается продолжить компиляцию. Это означает, что ошибки, обнаруженные на начальном этапе обработки, могут приводить к лавине наведенных ошибок на следующих этапах. Аналогично обрабатываются ошибки в информационных файлах: если ошибка, которая произошла при обработке файлов тем справочника, не очень серьезная, то компиляция продолжается. В качестве реакции на единственную ошибку в информационном файле компилятор может выдавать сразу несколько сообщений. Так при ошибке в идентификаторе определенной статьи на экран будет выводиться сообщение об ошибке всякий раз, когда компилятор будет встречать в информационном файле ссылку на эту статью. Такая ошибка легко устраняется путем простой коррекции текста сноски, определяющего контекстную строку этой статьи.
Назад | Содержание | Вперед
| MM_ADLIB | MM_MOM_CLOSE |
| MM_JOY1BUTTONDOWN | MM_MOM_DONE |
| MM_JOY1BUTTONUP | MM_MOM_OPEN |
| MM_JOY1MOVE | MM_MPU401_MIDIN |
| MM_JOY1ZMOVE | MM_MPU401_MIDIOUT |
| MM_JOY2BUTTONDOWN | MM_PC_JOYSTICK |
| MM_JOY2BUTTONUP | MM_SNDBLST_MIDIN |
| MM_JOY2MOVE | MM_SNDBLST_MIDIOUT |
| MM_JOY2ZMOVE | MM_SNDBLST_SYNTH |
| MM_MCINOTIFY | MM_SNDBLST_WAVEN |
| MM_MICROSOFT | MM_SNDBLST_WAVEOUT |
| MM_MIDI_MAPPER | MM_WAVE_MAPPER |
| MM_MIM_CLOSE | MM_WIM_CLOSE |
| MM_MIM_DATA | MM_WIM_DATE |
| MM_MIM_ERROR | MM_WIM_OPEN |
| MM_MIM_LONGDATA | MM_WOM_CLOSE |
| MM_MIM_LONGERROR | MM_WOM_DONE |
| MM_MIM_OPEN | MM_WOM_OPEN |
| WM_ALTTABACTIVE | WM_ISACTIVEICON |
| WM_BEGINDRAG | WM_LBTRACKPOINT |
| WM_CONVERTREQUEST | WM_NEXTMENU |
| WM_CONVERTRESULT | WM_QUERYDROPOBJECT |
| WM_DRAGLOOP | WM_QUERYPARKICON |
| WM_DRAGMOVE | WM_SETHOTKEY |
| WM_DRAGSELECT | WM_SETVISIBLE |
| WM_DROPOBJECT | WM_SIZEWAIT |
| WM_ENTERMENULOOP | WM_SYNCPAINT |
| WM_ENTERSIZEMOVE | WM_SYNCSTACK |
| WM_EXITMENULOOP | WM_SYSTIMER |
| WM_EXITSIZEMOVE | WM_TESTING |
| WM_FILESYSCHANGE | WM_YOMICHAR |
| WM_GETHOTKEY |
Назад |Содержание | Вперед
Ниже приводятся сообщения об ошибках, генерируемые Borland С++. В Borland C++ имеются следующие категории ошибок: ошибки этапа выполнения, ошибки этапа компиляции, ошибки компилятора справочников Help, ошибки TLIB и ошибки TLINK. Эти ошибки поясняются в данном приложении. Сообщения об ошибках, выводимые системой интерфейса с пользователем, поясняются в файлах документации на дистрибутивных дисках.
Сначала указывается тип сообщения (например, сообщение этапа компиляции или сообщение утилиты Help). В большинстве пояснений указывается возможная причина ошибки, как можно от нее избавиться или приводится предупреждающее сообщение.
Сообщения об ошибках перечислены в алфавитном порядке, по старшинству символов ASCII; обычно первыми идут сообщения, начинающиеся символами (равенство, запятая, фигурная скобка и т.д.).
Поскольку сообщения, в которых на первом месте выводится имя, специфическое для данной программы, не могут быть расставлены по алфавиту, то они также находятся в начальной части каждого списка сообщений.
Например, если у вас имеется функция С++ goforit, то фактически вы можете получить сообщение об ошибке:
goforit must be declared with no arguments
Для того, чтобы найти описание данного сообщения в этой главе, искать следует сообщение:
функция must be declared with no arguments
в начале списка сообщений об ошибках. Сообщение упорядочивается по алфавиту по слову "must".
Если же некоторая переменная включается в текст сообщения позже (например, "Address of overloaded function функция doesn't match типу"), то такое сообщение можно найти по алфавиту, в данном случае на букву A.
Сообщения об ошибках могут генерироваться компилятором, ком- поновщиком, утилитой MAKE или библиотекарем. Кроме того, такие ошибки может генерировать программа на этапе выполнения.
Нефатальные ошибки, генерируемые компилятором, указывают на синтаксические ошибки в программе, ошибки командной строки или ошибки, вызванные ситуациями на диске или в памяти. Компилятор завершает текущую фазу компиляции и прекращает работу. На каждой фазе компиляции (препроцессорная обработка, синтаксический анализ, оптимизация и генерация кода) компилятор пытается найти максимально возможное число ошибок.
Ошибки, генерируемые компоновщиком, не приводят к удалению файлов .EXE или .MAP, однако выполнять такой файл .EXE не следует. При компиляции из IDE сообщения компоновщика об ошибках рассматриваются как фатальные ошибки.
Утилита MAKE генерирует ошибки при неверном синтаксисе или семантических ошибках формирующего файла. Чтобы исправить их, нужно отредактировать формирующий файл.
Сообщения об ошибках на этапе выполнения обычно вызываются логическими ошибками в программе. Нужно исправить причину и перекомпилировать программу.
| WM_HSCROLL | WM_MOUSEACTIVATE |
| WM_LBUTTONDCLICK | WM_MOUSEMOVE |
| WM_LBUTTONDOWN | WM_RBUTTONDBLCLK |
| WM_LBUTTONUP | WM_RBUTTONDOWN |
| WM_MBUTTONDCLICK | WM_RBUTTONUP |
| WM_MBUTTONDOWN | WM_SETCURSOR |
| WM_MBUTTONUP | WM_VSCROLL |
| WM_BUTTONUP | WM_MOUSEFIRST |
| WM_MOUSELAST |
| DM_COLOR | DM_PAPERLENGTH |
| DM_COPIES | DM_PAPERSIZE |
| DM_COPY | DM_PAPERWIDTH |
| DM_DEFAULTSOURCE | DM_PRINTQUALITY |
| DM_DUPLEX | DM_PROMPT |
| DM_IN_BUFFER | DM_SCALE |
| DM_INPROMPT | DM_SPECVERSION |
| DM_MODIFY | DM_TTOPION |
| DM_ORIENTATION | DM_UPDATE |
| DM_OUT_BUFFER | DM_YRESOLUTION |
| DM_OUTDEFAULT |
| WIN_USER | WM_RCRESULT |
| WM_GLOBALRCCHANGE | WM_SKB |
| WM_HEDITCTL | WM_PENWINFIRST |
| WM_HOOKRCRESULT |