Четвертый Borland C++ и его окружение

       

- 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

    (синтаксическая ошибка)

    Компоновщик обнаружил в файле определения модуля синтакси-

    ческую ошибку. Место ошибки указывается именем файла и номером

    строки.

    Назад | Содержание | Вперед


    Содержание раздела