- S -
Segment сегмент exceeds 64K
Сообщение об ошибке утилиты TLINK
(сегмент превышает 64К)
Данная ошибка возникает, если определено слишком много дан-
ных для данного сегмента кода или данных, когда утилита TLINK
комбинирует сегменты с одним именем из разных исходных файлов.
Segment сегмент is in two groups: группа_1 and группа_2
Предупреждение утилиты TLINK
(указанный сегмент содержится в двух группах)
Компоновщик обнаружил конфликт в двух указанных группах.
Обычно это происходит только в программах на языке Ассемблера.
Это означает, что два модуля присваивают сегмент двум различным
группам.
Segment сегмент in two groups: группу_1 and группа_2
Предупреждение утилиты TLINK
(сегмент содержится в двух группах)
Компоновщик встретил конфликтное требование двух групп имен.
Обычно это происходит в программах на ассемблере. Это означает,
что два модуля присваивают сегмент двум различным группам.
Self relative fixup overflowed in module модуль
Предупреждение утилиты TLINK
(переполнение корректировок в модуле "модуль")
Это сообщение выводится в результате самоотносительной ссыл-
ки (обычно вызова) из одного физического сегмента в другой. Обыч-
но это происходит при использовании кода ассемблера, но может
возникать и при указании параметров именования сегмента компиля-
тора. При ссылке из одного сегмента кода на другой все нормально.
Однако ссылка на сегмент данных может означать ошибку.
Size of идентификатор unknown or zero
Сообщение об ошибке этапа компиляции
(Размер идентификатора неизвестен или нулевой)
Данный идентификатор использоваться в контексте, где нужен
размер. Без размера могут быть объявлены только признак (тег)
структуры (структура еще не определена), либо массив extern.
Ссылки на такие элементы (например, операцией sizeof) или обраще-
ние к ним через указатель к этому типу запрещены. Реорганизуйте
объявление таким образом, чтобы размер данного идентификатора был
известен.
sizeof may not be applied to a bit field
Сообщение об ошибке этапа компиляции
(операция sizeof неприменима к битовому полю)
Операция sizeof возвращает размер объекта данных в байтах и
неприменима к битовым полям.
sizeof may not be applied to a function
Сообщение об ошибке этапа компиляции
(операция sizeof неприменима к функции)
Операция sizeof применима только к объектам данных, а не к
функциям. Можно запросить размер указателя функции.
Size of the type is unknown or zero
Сообщение об ошибке этапа компиляции
(размер типа неизвестен или нулевой)
Данный тип использовался в контексте, где необходим размер.
Например, тег структуры может быть только объявлен (а структура
еще не определена). Тогда некоторые ссылки к ней (например, опе-
рацией sizeof) или обращение к ней через указатель недопустимы.
Реорганизуйте объявления данного типа таким образом, чтобы размер
этого типа был доступен.
идентификатор specifies multiple or duplicate access
Сообщение об ошибке этапа компиляции
(идентификатор задает многократный или дублирующийся доступ)
Базовый класс должен описываться как public или private, но
не то и другое одновременно. Спецификатор доступа не должен зада-
ваться для базового класса более одного раза.
Stack overflow
Сообщение об ошибке этапа выполнения
(переполнение стека)
По умолчанию размер стека для программ Borland C++ равен
4096 байт. Для большинства программ этого достаточно, однако
программы с рекурсивными функциями или большими объемами локаль-
ных данных могут переполнить стек. Данное сообщение выдается
только в том случае, когда включено средство контроля стека. При
получении этого сообщения вы можете перейти к большей модели па-
мяти, увеличить размер стека, либо уменьшить использование стека
вашей программой. Информацию о том, как изменить размер стека с
помощью глобальной переменной _stklen, см. в Главе 3, "Глобальные
переменные" в "Справочнике по библиотеке". Для уменьшения коли-
чества используемых функцией локальных данных можно поступить
так, как показано в приводимом ниже примере. Переменная buffer
объявлена как static и потому, в отличие от list, не расходует
стек.
void anyfunction( void )
{
static int buffer[ 2000 ]; /* размещается в сегменте
данных */
int list[ 2000 ]; /* размещается в стеке */
}
Объявление локальных переменных как static имеет два недостатка.
глобальным переменным и динамически распределяемой облас-
ти. (Чтобы заплатить Павлу, приходится грабить Петра).
Однако этот недостаток не самый главный.
начает, что если функция должна вызываться рекурсивно или
асинхронно, и при этом важно, чтобы каждый вызов функции
работал со своей собственной копией переменной, то такая
переменная не может быть статической. Это связано с тем,
что при каждом вызове функции данная переменная будет за-
нимать ту же самую область памяти, вместо того, чтобы ей
распределялась всякий раз новая. Также возникает проблема
с разделением доступа к переменной, если функция содержит
вызов самой себя (рекурсивно), либо должна выполняться
одновременно сама с собой (асинхронно). Для большинства
программ DOS это не проблема. Если вы не пишете рекурсив-
ных функций и не работаете в мультизадачном режиме, то
вам не о чем беспокоиться. В противном случае приведенные
выше объяснения помогут вам разобраться, что к чему.
Statement missing ;
Сообщение об ошибке этапа компиляции
(в операторе отсутствует ;)
Компилятор встретил выражение с оператором без завершающей
точки с запятой.
Storage class класс памяти not allowed here
Сообщение об ошибке этапа компиляции
(класс памяти здесь не разрешен)
Данный класс памяти здесь не допускается. Возможно, заданы
два класса памяти (можно задать только 1).
String type not allowed with this operand
Сообщение об ошибке утилиты MAKE
(строковый тип в данном операторе недопустим)
Вы пытаетесь использовать операнд, который не допускается
для сравнения строковых типов. Допускаются операнды: ==, !=, <,
>, <= и >=.
Structure passed by value
Предупреждение этапа компиляции
(структура передана по значению)
Если выдача данного предупреждения разрешена, то оно будет
генерироваться всякий раз, когда структура передается в качестве
аргумента по значению. Распространенная ошибка состоит в том, что
при передаче структуры как аргумента программист опускает опера-
цию получения адреса &. Поскольку передача структуры по значению
не запрещена, то опустить данную операцию можно. Это предупрежде-
ние сообщает вам о нерациональности ваших действий.
Structure required on left side of . or .*
Сообщение об ошибке этапа компиляции
(в левой части операции . или .* требуется структура)
При вычислении левой части операции . или .* должна полу-
чаться структура. В данном случае это не так.
Structure size too large
Сообщение об ошибке этапа компиляции
(слишком большой размер структуры)
В исходном файле объявлена структура размером более 64К.
Style of function definition is now obsolete
Предупреждение этапа компиляции
(этот вид определения функции устарел)
В С++ старый стиль определения функции запрещен:
int func(p1, p2) int p1, p2; { /* ... */ }
Он также не допускается и многими другими компиляторами С++.
Subscripting missing ]
Сообщение об ошибке этапа компиляции
(В индексе отсутствует ])
Компилятор встретил выражение с индексом, в котором отсутс-
твует закрывающая квадратная скобка. Это может являться следстви-
ем отсутствия необходимой операции или наличия лишней, либо несо-
ответствия числа открывающих числу закрывающих круглых скобок.
Superfluous & with function
Предупреждение этапа компиляции
(избыточная операция & с функцией)
Операция адресации (&) с именем функции не требуется; любая
подобная операция отвергается.
Suspicious pointer conversion
Предупреждение этапа компиляции
(подозрительное преобразование указателя)
Компилятор встретил некоторое преобразование указателя, ко-
торое изменило тип, на который он указывает. Если это преобразо-
вание вам нужно, то для подавления данного предупреждения вос-
пользуйтесь явным приведением типа.
Switch selection expression must be of integral type
Сообщение об ошибке этапа компиляции
(выражение выбора в операторе switch должно быть целого ти-
па)
Задаваемое в круглых скобках выражение выбора оператора switch должно давать значение целого типа (char, short, int,
long, enum). Для того, чтобы выполнить данное требование, можно
воспользоваться явным приведением типов.
Switch statement missing (
Сообщение об ошибке этапа компиляции
(в операторе switch отсутствует ()
В операторе switch компилятор не смог обнаружить левой круг-
лой скобки после ключевого слова switch.
Switch statement missing )
Сообщение об ошибке этапа компиляции
(в операторе switch отсутствует ))
В операторе switch компилятор после выражения проверки не
смог обнаружить левой круглой скобки.
имя_файла(номер_строки): Syntax error
Сообщение об ошибке утилиты TLINK
(синтаксическая ошибка)
Компоновщик обнаружил в файле определения модуля синтакси-
ческую ошибку. Место ошибки указывается именем файла и номером
строки.
Назад | Содержание | Вперед