Ошибка illegal use of floating point c

[C++ Error] Unit1.cpp(23): E2060 Illegal use of floating point C++ Решение и ответ на вопрос 2337515

a_lar

3 / 3 / 0

Регистрация: 07.12.2017

Сообщений: 567

1

20.10.2018, 22:43. Показов 1679. Ответов 9

Метки нет (Все метки)


Ошибка на 22 строке

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//---------------------------------------------------------------------------
  #include <numeric.h>
#include <vcl.h>
#include  <iostream.h>
#include <conio.h>
#include <fstream.h>
//---------------------------------------------------------------------------
 
using namespace std;
int main()
{
    const int n = 10;
    int mas[n];
    float a = 5;
  float b = 10;
    int temp;
    srand (time(NULL));
    std::fstream f;
    f.open("filename.txt",std::fstream::out); 
    for(int i = 0; i<n;i++) 
    {
        mas[i]=rand()%a+(b-a);
        f<<mas[i]; 
    }
    f.close();
    
    for(int i = 0;i<n;i++) std::cout<<mas[i]<< " ";
    std::cout<<"n";
    for(int i = 0;i<n;i++)
        for(int j =i+1;j<n;j++)
        {
            if(mas[i]>mas[j])
            {
                temp = mas[i];
                mas[i] = mas[j];
                mas[j] = temp;
            }
        }
        
    f.open("filename.txt",std::fstream::out); 
for(int i = 0;i<n;i++)
    { 
        std::cout<<mas[i]<< " "; 
        f<<mas[i];
    }
    f.close();
 
 
         getch();
        return 0;
}
//---------------------------------------------------------------------------

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

20.10.2018, 22:43

9

141 / 110 / 30

Регистрация: 20.04.2011

Сообщений: 581

20.10.2018, 22:47

2

Нельзя через % брать остаток с float, только целые.



0



3 / 3 / 0

Регистрация: 07.12.2017

Сообщений: 567

20.10.2018, 22:51

 [ТС]

3

AlexP11223, а мне рандомные значения нужны
как их тогда записать?



0



3986 / 3255 / 910

Регистрация: 25.03.2012

Сообщений: 12,114

Записей в блоге: 1

20.10.2018, 22:53

4

a_lar, а они тебе обязательно дробные нужны?



0



141 / 110 / 30

Регистрация: 20.04.2011

Сообщений: 581

20.10.2018, 22:55

5

Вы ж а не меняете и оно 5. Зачем а float?



0



a_lar

3 / 3 / 0

Регистрация: 07.12.2017

Сообщений: 567

20.10.2018, 23:00

 [ТС]

6

Kuzia domovenok, да, по условию нужно сгенировать массив и упорядоченный массив записать обратно в файл

Добавлено через 4 минуты
AlexP11223,изменив на float все равно ошибка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//---------------------------------------------------------------------------
  #include <numeric.h>
#include <vcl.h>
#include  <iostream.h>
#include <conio.h>
#include <fstream.h>
//---------------------------------------------------------------------------
 
using namespace std;
int main()
{
    const int n = 10;
    int mas[n];
    float a ;
  float b ;
    int temp;
    srand (time(NULL));
    std::fstream f;
    f.open("filename.txt",std::fstream::out); 
    for(int i = 0; i<n;i++) 
    {
        mas[i]=rand()%a+(b-a);
        f<<mas[i]; 
    }
    f.close();
    
    for(int i = 0;i<n;i++) std::cout<<mas[i]<< " ";
    std::cout<<"n";
    for(int i = 0;i<n;i++)
        for(int j =i+1;j<n;j++)
        {
            if(mas[i]>mas[j])
            {
                temp = mas[i];
                mas[i] = mas[j];
                mas[j] = temp;
            }
        }
        
    f.open("filename.txt",std::fstream::out); 
for(int i = 0;i<n;i++)
    { 
        std::cout<<mas[i]<< " "; 
        f<<mas[i];
    }
    f.close();
 
 
         getch();
        return 0;
}
//---------------------------------------------------------------------------



0



141 / 110 / 30

Регистрация: 20.04.2011

Сообщений: 581

20.10.2018, 23:00

7

Цитата
Сообщение от a_lar
Посмотреть сообщение

по условию нужно сгенировать массив и упорядоченный массив записать обратно в файл

и? как это к вопросу относится?
…и у вас массив все равно int.



0



Kuzia domovenok

3986 / 3255 / 910

Регистрация: 25.03.2012

Сообщений: 12,114

Записей в блоге: 1

20.10.2018, 23:01

8

Лучший ответ Сообщение было отмечено a_lar как решение

Решение

C++
1
a+rand()*1.0f*(b-a)/RAND_MAX;



0



141 / 110 / 30

Регистрация: 20.04.2011

Сообщений: 581

20.10.2018, 23:03

9

Цитата
Сообщение от a_lar
Посмотреть сообщение

изменив на float все равно ошибка

наоборот, сделайте int.
И верните инициализацию, сейчас у них неопределённые значения (мусор).



0



3986 / 3255 / 910

Регистрация: 25.03.2012

Сообщений: 12,114

Записей в блоге: 1

20.10.2018, 23:15

10

AlexP11223, я уже всё сделал с float



0



Перечень сообщений

— A —

— B —

— C —

— D —

— E —

— F —

— G —

— H —

— I —

— L —

— M —

— N —

— O —

— P —

— R —

— S —

— T —

— U —

— V —

— W —

— D —

Debug into switch ignored for .COM files

Предупреждение утилиты TLINK

(параметр отладочной информации для файлов .COM игнорируется)

Borland C++ не включает отладочную информацию в файлы .COM.

См. описание параметра /v.

Debug information in module модуль will be ignored

Предупреждение утилиты TLINK

(информация для отладки в модуле модуль будет игнорироваться)

Объектные файлы, скомпилированные с включением отладочной

информации, теперь содержат запись о версии. Основная версия в

данной записи выше той, которую в настоящее время поддерживает

компоновщик TLINK, поэтому компоновщик не может сгенерировать

отладочную информацию для данного модуля.

Debug information overflow; try fewer modules withDebug info

Сообщение об ошибке утилиты TLINK

(переполнение отладочной информации; попробуйте включать отладочную информацию в меньшее число модулей)

Слишком много участвующих в компоновке модулей содержат отладочную информацию. Перекомпилируйте программу с меньшим объемом

отладочной информации.

DeclarationDoes not specify a tag or an identifier

Сообщение об ошибке этапа компиляции

(описание не определяет идентификатор или признак)

Это описание ничего не описывает. Это может быть структура

или объединение без признака, либо переменная в описании. С++

требует, чтобы что-то описывалось.

Declaration is not allowed here

Сообщение об ошибке этапа компиляции

(объявление здесь недопустимо)

Объявления не могут использоваться в управляющих операторах

для операторов while, for,Do. if или switch.

Declaration missing ;

Сообщение об ошибке этапа компиляции

(в объявлении отсутствует ;)

В исходном файле содержится объявление поля структуры или

объединения, в котором отсутствует точка с запятой (;).

Declaration syntax error

Сообщение об ошибке этапа компиляции

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

Исходный файл содержит объявление, в котором отсутствует некоторый символ имя или наоборот имеются лишние.

Declaration terminated incorrectiy

Сообщение об ошибке этапа компиляции

(неправильное окончание объявления)

Объявление содержит лишний или неверный конечный символ,

например, точка с запятой, помещенная после тела функции. Эту

ошибку также дает функция-элемент С++, объявленная в классе с

точкой с запятой между заголовком и открывающей левой фигурной

скобкой.

Declaration was expected

Сообщение об ошибке этапа компиляции

(требуется объявление)

Требуется, но не найдено объявление. Это обычно бывает при

отсутствии разделителя, например, запятой, точки с запятой, правой круглой скобки или правой квадратной скобки.

Declare operatorDelete (void*) or (void*, size_t)

Сообщение об ошибке этапа компиляции

(описание операцииDelete (void*) или (void*, size_t))

Описание операцииDelete с единственным параметром void* или

со вторым параметром типа size_t. Если вы используете вторую версию, то она будет использоваться для ссылки на первую версию.

Глобальная операцияDelete может описываться только в форме с одним параметром.

Declare operatorDelete[] (void*) or (void*, size_t)

Сообщение об ошибке этапа компиляции

(описание операцииDelete[] (void*) или (void*, size_t))

Опишите операторDelete с один параметром void и параметром

типа type size_t.

Declare type тип ptior to use in prototype

Предупреждение этапа компиляции

(описание типа тип перед использованием в прототипе)

Когда прототип функции ссылается на не описанный ранее тип

структуры, то описание в прототипе не эквивалентно описанию вне

прототипа. Например:

         int func(struct S *ps)

                     struct s{ /* ... */ }





Так как в области действия прототипа для функции func нет

структуры s, типом параметра ps будет указатель на неопределенную

структуру s и не эквивалентен описываемой позднее структуре s.

Далее это приведет к предупреждениям и сообщениям об ошибках

из-за несовместимых типов, что было бы весьма непонятным без данного предупреждения. Чтобы исправить ошибку, вы можете поместить

описание структуры s перед прототипом, который на нее ссылается,

или добавить перед любым прототипом, который ссылается на структуру s, неполное описание типа struct s;. Если параметром функции

является struct, а не указатель на struct, то неполное описание

недостаточно. Тогда вы должны поместить описание структуры перед

прототипом.

Default argument value redeclared

Сообщение об ошибке этапа компиляции

(переопределение заданного по умолчанию значения аргумента)

Когда для параметра функции С++ описывается значение по

умолчанию, это значение не может описываться заново, изменяться

или опускаться в другом описании той же функции.

Default argument value redeclared for parameter параметр

Сообщение об ошибке этапа компиляции:

(для параметра заново описано используемое по умолчанию значение аргумента параметр)

Когда описанный параметр функции С++ имеет используемое по

умолчанию значение, данное значение нельзя изменить, описать заново или пропустить в другом описании той же функции.

Default expression may not use local variable

Сообщение об ошибке этапа компиляции

(используемое по умолчанию значение не может использовать

локальную переменную)

В используемых по умолчанию аргументах выражения не допускается использование локальных переменных или других параметров.

Default outside of switch

Сообщение об ошибке этапа компиляции

(операторDefault вне оператора switch)

Компилятор обнаружил ключевое словоDefault вне оператора

switch. Обычно это вызывается пропущенной фигурной скобкой.

Default value missing

Сообщение об ошибке этапа компиляции

(пропущено используемое по умолчанию значение)

Если в функции С++ объявляется параметр со значением по

умолчанию, все последующие параметры также должны иметь значения

по умолчанию. В данном объявлении за параметром со значением по

умолчанию следует параметр без умолчания.

Default value missing following parameter параметр

Сообщение об ошибке этапа компиляции

(после параметра пропущено используемое по умолчанию значение)

Все параметры после первого параметра с используемым по

умолчанию значением также должны иметь заданные по умолчанию значения.

DefineDirective needs an identifier

Сообщение об ошибке этапа компиляции

(директивеDefine необходим идентификатор)

Первый непробельный символ после #define должен быть идентификатором. Компилятор встретил на этом месте какие-либо другие

символы.

symbolDefined in module модуль isDuplicated

Ошибка или предупреждение утилиты TLINK

(идентификатор, определенный в модуле модуль, дублируется)

Имеется конфликт между двумя идентификаторами (общими или

общедоступными). Обычно это означает, что идентификатор определен

в двух модулях. Если обе из них обнаружены в файлах .OBJ, возникает ошибка, так как TLINK не знает, какой из них является допустимым. Если TLINK обнаруживает один из дублируемых идентификаторов в библиотеке, а другой — файле .OBJ, то выводится предупреждение. В этом случае TLINK использует один из файлов .OBJ.

Delete array size missing ]

Сообщение об ошибке этапа компиляции

(в спецификаторе массива пропущена ])

В спецификаторе массива в операции даты пропущена скобка ].

Destructor cannot beDeclared const or volatile

Сообщение об ошибке этапа компиляции

(деструктор не может описываться как const или volatile)

Деструктор описан как const и/или volatile, а это не допускается.

Destructor cannot have a return type specification

Сообщение об ошибке этапа компиляции

(деструктор не может иметь спецификации типа возврата)

Деструкторы С++ не имеют типа возврата, и вы не можете объявить тип или значение возврата.

Destructor for класс is not accessible

Сообщение об ошибке этапа компиляции

(деструктор для класса недоступен)

Деструктор для данного класса имеет тип protected или

private и недоступен из данной точки для разрушения класса. Если

деструктор класса является частным (private), класс не может быть

разрушен и потому не может никогда быть использован. Это наверняка ошибка. Защищенный деструктор (protected) допускает доступ

только из производных классов. Это полезно для того, чтобы предотвратить создание базовых классов, обеспечив создание из них

производных классов.

Destructor for класс required in conditional expression

Сообщение об ошибке этапа компиляции

(в условном выражении потребовался деструктор класса класс)

Если компилятор должен создать временную локальную переменную в условном выражении, здесь неудобно вызывать деструктор,

поскольку переменная может оказаться как инициализированной, так

и неинициализированной. Временная переменная может создаваться

явно в виде имя_класса(значение_1,значение_2), либо неявно, некоторыми другими кодами программы. Измените код, чтобы избавиться

от этого временного значения.

Destructor name must match the class name

Сообщение об ошибке этапа компиляции

(имя деструктора должно соответствовать имени класса)

В классах С++ объявление деструктора класса вводится символом тильда (~). Имя деструктора должно совпадать с именем класса.

В вашем исходном файле ~ предшествует какому-то другому имени.

Divide error

Сообщение об ошибке этапа выполнения

(ошибка деления)

Вы пытаетесь разделить целое значение на 0, например:

        int n = 0;



             n = 2 / n;





Вы можете перехватить эту ошибку с помощью сигнальной функции. В противном случае Borland C++ вызывает функцию abort, и

программа завершает работу.

Division by zero

Сообщение об ошибке этапа компиляции

(деление на ноль)

В исходном файле встретилось выражение типа константы,

представляющее собой нулевой делитель.

Division by zero

Предупреждение этапа компиляции

(деление на ноль)

Выражение с делением или получением остатка имеет в качестве

делителя литеральный ноль.

Division by zero

Сообщение об ошибке утилиты MAKE

(деление на ноль)

Деление или остаток в операторе !if имеет нулевой делитель.

Do statement must have while

Сообщение об ошибке этапа компиляции

(операторDo должен иметь while)

В исходном файле встретился операторDo без соответствующего

ограничивающего ключевого слова while.

имя_файлаDoes not exist -Don’t know how to make it

Фатальная ошибка утилиты MAKE

(файл не существует — неизвестно, как его сформировать)

В последовательности построения указано имя несуществующего

файла, и неизвестно правило, которое позволило бы сформировать

имя файла.

DOS error, ax = число

Сообщение об ошибке утилиты TLINK

(ошибкаDOS, ax = число)

Это происходит, еслиDOS возвращает непредвиденную ошибку. В

результирующем коде ошибки выводится значение регистра ax. Это

может говорить об ошибкеDOS или внутренней ошибке TLINK. Единственными вызовамиDOS, при которых TLINK может приводить к данной

ошибке, являются read, write, seek и close.

Do-whlle statement missing (

Сообщение об ошибке этапа компиляции

(в оператореDo-while отсутствует ()

В оператореDo компилятор не нашел после ключевого слова

while левой круглой скобки.

Do-whlle statement missing )

Сообщение об ошибке этапа компиляции (в оператореDo-while отсутствует ))

В оператореDo компилятор не нашел после условного выражения

правой круглой скобки.

Do-whlle statement missing ;

Сообщение об ошибке этапа компиляции

(в оператореDo-while отсутствует ;)

В условном выражении оператораDo компилятор не нашел точки

с запятой после правой круглой скобки.

Dublicate case

Сообщение об ошибке этапа компиляции

(повторение case)

Каждое ключевое слово case оператора switch должно иметь

уникальное значение выражения-константы.

Duplicate Handler for type тип1, already had тип2

Сообщение об ошибке этапа компиляции:

(обработчик для типа1 дублируется; уже задан для типа2)

Не допускается иметь два обработчика одного типа.

Duplicate ordinal for exports: строка (знач1) and строка(знач2)

Предупреждение утилиты TLINK

(В операторе export дублируется номер)

Две экспортируемые функции, перечисленные в секции EXPORTS

файла определения модуля определяют то же внутреннее имя, но разное порядковое значение. Задайте одно значение или удалите одну

из них.

— E —

Empty LEDATA record in module модуль

Предупреждение утилиты TLINK

(пустая запись LEDATA в модуле)

Такое предупреждение возможно, если транслятор генерирует

запись без данных. Сообщите об этом разработчику транслятора. Такая запись может давать отрицательные эффекты.

Enum syntaxError

Сообщение об ошибке этапа компиляции

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

ОбъявлениеEnum не содержит правильно оформленного списка

идентификаторов.

Error changing file buffer size

Сообщение об ошибке утилиты TLIB

(ошибка изменения размера буфера файла)

Утилита TLIB пытается настроить размер буфера файла, используемого при операции чтения или записи в файл, но памяти не хватает. Чтобы исправить ситуацию, может потребоваться освободить

некоторый объем системной памяти.

Error directive: сообщение

Фатальная ошибка этапа компиляции

(директиваError: сообщение)

Данное сообщение появляется при обработке директивы #error

из исходного файла. Текст этой директивы выводится в сообщении.

Error directive: сообщение

Фатальная ошибка утилиты MAKE

(директиваError: сообщение)

Данное сообщение появляется при обработке утилитой MAKE директивы #error из исходного файла. Текст этой директивы выводится

в сообщении.

Error opening имя_файла

Сообщение об ошибке утилиты TLIB

(ошибка открытия указанного файла)

Утилита TLIB по каким-то причинам не может открыть указанный

файл.

Error opening имя_файла for output

Сообщение об ошибке утилиты TLIB

(ошибка открытия файла для вывода)

TLIB по каким-то причинам не может открыть указанный файл

для вывода. Обычно это вызывается недостатком места на диске для

файла библиотеки или листинга. Кроме того эта ошибка может возникать в ситуации, когда целевой файл существует, но помечен как

доступный только по чтению.

Error renaming имя_файла to имя_файла

Сообщение об ошибке утилиты TLIB

(ошибка переименования файла)

TLIB строит библиотеку, используя временный файл, а затем

переименовывает временный файл в целевую библиотеку. Ошибка

обычно вызывается нехваткой места на диске.

Error writing output file

Сообщение об ошибке этапа компиляции

(ошибка при записи выходного файла)

Ошибка DOS при попытке Borland C++ вывести файл .OBJ, .EXE

или временный файл. Проверьте параметры командной строки. Убедитесь также, что на диске достаточно места.

__except or __finallyExpected following __try

Сообщение об ошибке этапа компиляции

(за __try должно следовать __except или __finally

В С++ за блоком __try должен следовать блок обработки __except или __finally.

Exception handling variable may not be used there

Сообщение об ошибке этапа компиляции

(здесь не должна использоваться переменная обработки исключительной ситуации)

Предпринята попытка использовать одно из значений обработки

исключительной ситуации, которое ограничивается конкретной конструкцией обработки, например, GetExceptionCode().

Exception specification not allowed here

Сообщение об ошибке этапа компиляции

(спецификация исключительной ситуации здесь не допускается)

Описания типа указателя на функцию не должны содержать спецификаций особых ситуаций.

Explicit stacks are ignored in PE images

Предупреждение TLINK

(явные стеки в образах PE игнорируются)

32-разрядные приложения Windows имеют формат приложений PE

без явного указания стеков. Сегмент стека компонуется с образом,

но не будет использоваться как стек приложения. Для установки

размера стека используется параметра размера стека, и выделять

стек будет операционная система.

Export идентификатор is duplicated

Предупреждение TLINK

(экспортируемый идентификатор дублируется)

В _export два раза используется одно и то же имя. Компоновщик использует первый идентификатор.

ExpressionExpected

Сообщение об ошибке этапа компиляции

(требуется выражение)

Здесь требуется выражение, а текущий символ не может начинать выражение. Это сообщение может выдаваться, когда ожидается

в предложении if или while управляющее выражение, либо при инициализации переменной. Сообщение часто появляется в результате случайно вставленного или удаленного из исходного файла символа.

Expression of scalar typeExpected

Сообщение об ошибке этапа компиляции

(ожидается выражение скалярного типа)

Унарные операции отрицания (!), увеличения (++) и уменьшения

(—) требуют выражений скалярного типа. Допустимыми являются

только типы char, short, int, long,Enum, float, double и long

double и типы указателей.

Expression syntax

Сообщение об ошибке этапа компиляции

(синтаксис выражения)

Это обобщенное сообщение об ошибке, выдаваемое, когда компилятор при лексическом анализе выражения встречает какую-либо

серьезную ошибку. Наиболее часто она встречается, если подряд

следуют две операции, либо при отсутствии или несоответствии числа круглых скобок, либо при отсутствии точки с запятой в предыдущем выражении.

Expression syntaxError in !if statement

Сообщение об ошибке утилиты MAKE

(синтаксическая ошибка выражения в операторе !if)

Выражение в операторе !if имеет неправильный вид: оно содержит неравное количество открывающих и закрывающих скобок, лишний

или пропущенный оператор или пропущенную или лишнюю константу.

причина -Extended dictionary not created

Предупреждение утилиты TLIB

(расширенный словарь не создан)

Утилита TLIB не могут сформировать расширенный словарь из-за

причины, указанной в сообщении.

Extended dictionary bot found in library библиотека,Extended dictionaries ignored

Предупреждение утилиты TLINK

(в указанной библиотеке на найден расширенный словарь; расширенные словари игнорируются)

Параметр /E TLINK требует, чтобы все библиотеки имели расширенные словари. Если в ходе компоновки обнаруживается библиотека

без расширенного словаря, то компоновщик не обрабатывает расширенные словари и выполняет процесс компоновки по умолчанию.

Extern variable cannot be initialized

Сообщение об ошибке этапа компиляции

(переменнаяExtern не может быть инициализирована)

Класс памятиExtern применительно к переменной означает, что

переменная здесь объявляется, но не определяется — распределение

памяти для нее не происходит. Следовательно, инициализация переменной в объявлении невозможна.

Extern идентификатор was not qualified with __import in module модуль

Предупреждение утилиты TLINK

(внешний идентификатор не описан в модуле с помощью __import)

В 32-разрядных приложениях Windows, ссылающихся на импортируемые идентификаторы, требуется косвенное указание на получение

данных. В вызовах это автоматически обрабатывается компоновщиком.

В ссылках на импорт DATA эту косвенную связь должен генерировать

компилятор (иначе приложение будет работать некорректно), а для

этого идентификатор должен описываться с __import.

Extra argument in template class name шаблон

Сообщение об ошибке этапа компиляции

(лишний аргумент в шаблоне имени класса)

Шаблон имени класса задает слишком много фактических значений для его формальных параметров.

Extra parameter in call

Сообщение об ошибке этапа компиляции

(Лишние параметры в вызове)

Вызов функции через указатель, определенный в прототипе, содержит слишком много аргументов.

Extra parameter in call to функция

Сообщение об ошибке этапа компиляции

(Лишние параметры в вызове функции)

Вызов названной функции (которая была определена с прототипом) содержит слишком много аргументов.

— F —

Failed to locate DPMI server (MPMI16BI.OVL)

Failed to locate protected mode loader (DPMILOAD.EXE)

Сообщение об ошибке этапа компиляции

(не найден сервер DPMI)

Убедитесь, что файлы MPMI16BI.OVL находится в каком-либо

указанном в маршруте каталоге, или в том же каталоге, что и командное средство защищенного режима, которое вы пытаетесь использовать.

Failed to locate protected mode loader (DMPILOAD.EXE)

Фатальная ошибка командной строки:

(не найден загрузчик защищенного режима)

Убедитесь, что файл DMPILOAD.EXE находится в каком-либо указанном в маршруте каталоге, или в том же каталоге, что и командное средство защищенного режима, которое вы пытаетесь использовать.

Failed read from имя_файла

Сообщение об ошибке утилиты TLINK

(чтение из файла невозможно)

Компоновщик не может прочитать данный файл.

Failed write from имя_файла

Сообщение об ошибке утилиты TLINK

(запись в файла невозможна)

Компоновщик не может записать данный файл.

__far16 may be used with __pascal or __cdecl

Сообщение об ошибке этапа компиляции

(__far16 может использоваться __pascal или __cdecl)

Для вызовов функций или ссылки на данные в 16-разрядной DLL

вы использовали __far16, но такие функции и данные могут модифицироваться только с помощью __pascal или __cdecl.

File must contain at least one external declaration

Сообщение об ошибке этапа компиляции

(файл должен содержать хотя бы одно объявление external)

Данная единица компиляции было логически пустой и не содержала никаких объявлений. Язык Си стандарта ANSI и С++ требуют,

чтобы в единице компиляции находились какие-нибудь переменные.

File name too long

Сообщение об ошибке этапа компиляции

(слишком длинное имя файла)

Имя файла в директиве #include было слишком длинным для обработки его компилятором. Имена файлов в DOS не могут превышать

79 символов.

File name too long

Сообщение об ошибке этапа компиляции

(имя файла имеет слишком большую длину)

Имя файла, заданное в директиве !include, имеет слишком

большую длину для обработки ее обслуживающей программой МAKE 512 байт (размер внутреннего буфера).

имя_файла file not found

Предупреждение утилиты TLIB

(указанный файл не найден)

Библиотекарь, работающий в режиме командной строки, пытается

добавить несуществующий объект, но библиотека создана.

имя_файла file not found

Сообщение об ошибке утилиты TLIB

(указанный файл не найден)

Интегрированная интерактивная среда создает библиотеку, удаляя сначала существующую библиотеку, а затем выполняя перестройку. Если какой-либо объект не существует, то библиотека считается

неполной, и возникает данная ошибка. Если интегрированная среда

сообщает, что библиотека не существует, то при компиляции исходного модуля могли быть ошибки. Выполнение команд Compile Make или

Compile Build должно помочь избавиться от ошибки, или определить,

где существует ошибка.

имя_файла(имя_строки): File read error

Сообщение об ошибке утилиты TLINK

(ошибка чтения файла)

При чтении программой TLINK файла определения модуля возникла ошибка DOS. Это обычно указывает не преждевременный конец файла.

Fixup to zero length segment in module модуль

Сообщение об ошибке утилиты TLINK

(корректировка в сегмент с нулевым размером в указанном модуле)

Указывает на некорректную ссылку в объектном коде (которую

TLINK должен скорректировать во время компоновки) на код или данные.

Fixup owerflow at адрес, target=адрес

Сообщение об ошибке утилиты TLINK

(переполнение корректировок по указанному адресу)

Некорректные данные или ссылка на код в объектном файле, который компоновщик должен корректировать на этапе компоновки.

Причиной часто бывает несоответствие моделей памяти. Чаще

всего имеется ближний вызов функции в другом сегменте кода. Данная ошибка может также возникнуть, если вы генерируете ближнее

обращение к данным или ссылку данных на функцию. В любом случае

идентификатор, указанный в target в сообщении об ошибке — это переменная или функция, на которую делается ссылка. Ссылка находится в указанном модуле, поэтому ищите в исходном файле данный модуль.

В программе на языке Ассемблера переполнение корректировок

часто возникает, если вы описываете внешнюю переменную в определении сегмента, но данная переменная на самом деле существует в

другом сегменте.

Если данный метод не позволяет идентифицировать причину

ошибки, или вы программируете на языке высокого уровня, отличном

от Borland C++, то эта ошибка может вызываться другими причинами.

В Borland C++ данная ошибка может генерироваться, если вы используете сегменты и имена групп, отличные от используемых для данной

модели памяти по умолчанию.

Floating point error: Divide by 0

Floating point error: Domain

Floating point error: Overflow

Сообщение об ошибке этапа выполнения

(ошибка операции с плавающей точкой: деление на 0 или переполнение)

Данная фатальная ошибка является следствием операции с плавающей точкой, для которой результат не определен. «Деление на 0»

означает, что результат равен в точности +INF или -INF (плюс или

минус неопределенность), например для операции 1.0/0.0. Domain

означает, что результат не является числом, а переполнение — на

потерю значимости, например в случае присваивания 1e20*1e20 переменной типа double.

Floating point error: Partial loss of precision

Сообщение об ошибке этапа выполнения

(ошибка операции с плавающей точкой: частичная потеря точности)

Эта особая ситуация по умолчанию маскируется, и сообщения об

ошибках не выдаются. Потери точности игнорируются. Отменить маску

можно, вызвав _control87.

Floating point error: Underflow

Сообщение об ошибке этапа выполнения

(ошибка операции с плавающей точкой: потеря значимости)

Эта особая ситуация по умолчанию маскируется, и сообщения об

ошибках не выдаются. Потеря значимости преобразуется в ноль. Отменить маску можно, вызвав _control87.

Floating point error: Stack fault

Сообщение об ошибке этапа выполнения

(ошибка операции с плавающей точкой: сбой в стеке)

Это сообщение указывает на выход за границы стека плавающей

точки. В нормальных условиях оно не появляется и поэтому может

означать либо то, что ассемблерный код использует слишком много

регистров, либо неправильное объявление функции с плавающей точкой.

Этой ошибки можно избежать, маскируя особые ситуации таким

образом, чтобы они не появлялись, либо перехватывая их функцией

signal или _control87.

For statement missing (

Сообщение об ошибке этапа компиляции

(в операторе for отсутствует ()

В операторе for компилятор не нашел левой круглой скобки

после ключевого слова for.

For statement missing )

Сообщение об ошибке этапа компиляции

(в операторе for отсутствует ))

В операторе for компилятор не нашел после управляющего выражения правой круглой скобки.

For statement missing ;

Сообщение об ошибке этапа компиляции

(в операторе for отсутствует ;)

В операторе for компилятор не нашел точки с запятой после

одного из выражений.

Friend must be functions or classes

Сообщение об ошибке этапа компиляции

(«друзья» должны быть функциями или классами)

Дружественной в C++ может быть класс или другая функция.

Function call missing )

Сообщение об ошибке этапа компиляции

(в вызове функции отсутствует ))

Список аргументов при вызове функции содержит какую-то синтаксическую ошибку, например, отсутствует закрывающая правая

скобка.

Function calls not supported

Сообщение об ошибке этапа компиляции

(вызовы функции не поддерживаются)

При вычислении выражения интегрированным отладчиком вызовы

функций (включая функции неявного преобразования, конструкторы,

деструкторы, переопределенные операции и встраиваемые функции) не

поддерживается. Данное сообщение выводится отладчиком интегрированной среды.

Function defined inline after use as extern

Сообщение об ошибке этапа компиляции

(функция определена как встраиваемая после объявления

extern)

Функцию после того, как она была уже была использована нельзя определить как встраиваемую (inline). Или переставьте определение inline выше в тексте, или удалите его совсем.

Function definition cannot be a typedef’ed declaration

Сообщение об ошибке этапа компиляции

(определение функции не может быть объявлением typedef)

В Си стандарта ANSI тело функции не может определяться с помощью typedef с функцией Type.

Function функция cannot be static

Сообщение об ошибке этапа компиляции

(функция «функция» не может быть статической)

Только обычные функции-элементы и операции new и delete могут быть объявлены статическими (static). Конструкторы, деструкторы и прочие операции статическими быть не могут.

Function функция should have a prototype

Сообщение об ошибке этапа компиляции

(функция «функция» должна иметь прототип)

При вызове функции в области действия отсутствовал ее прототип.

В Си int foo(); не является прототипом, а int foo(int); является, также как и int foo(void);. В С++ int foo(); является

прототипом, также как и int foo(void);. В Си прототипы рекомендуется иметь для всех функций. В С++ прототипы для всех функций

обязательны. Во всех случаях, определение функции (заголовок и

тело функции) служит как прототип, если стоит перед любым другим

упоминанием функции.

Function should return a value

Предупреждение этапа компиляции

(функция должна возвращать значение)

Данная функция была описана (возможно неявно) как возвращающая значение. Был обнаружен оператор return без возвращаемого

значения или конец функции без оператора return. Возвращайте значение или описывайте функцию как void.

Functions функция_1 and функция_2 both use the same dispatch number

Сообщение об ошибке этапа компиляции

(обе функции используют один номер диспетчеризации)

Ошибка диспетчеризуемой виртуальной таблицы (DDVT). При переопределении динамически диспетчеризуемой функции в производном

классе используйте тот же индекс диспетчеризации.

Function cannot return array of functions

Сообщение об ошибке этапа компиляции

(функция не может возвращать массив функций)

Функция не может возвращать массив функций. Допускается возврат указателей или ссылок на массивы.

Functions containing local destructors are not expanded

inline in function функция

Предупреждение этапа компиляции

(функции, содержащие локальные деструкторы не могут быть

встраиваемыми функциями)

Вы создали встраиваемую функцию, для которой Borland C++

запрещает встраивание. Вы можете проигнорировать это предупреждение; охватывающая функция будет сгенерирована без расширения

встраиваемых функций.

Functions containing резервируемое_слово are not expanded inline

Предупреждение этапа компиляции

(функции, содержащие резервируемое_слово не могут быть

подставляемыми)

Функции, содержащие резервируемые слова do, for, while,

goto, switch, break, continue и case, не могут быть подставляемыми, даже при наличии задания их как inline. Функция может использоваться, но будет рассматриваться как обычная статическая (не глобальная) функция. Копия этой функции будет находиться в любой

единице компиляции, где она вызывается.

Functions may not be part of a struct or union

Сообщение об ошибке этапа компиляции

(функции не могут быть частью структуры или объединения)

Данное поле структуры или объединения Си было объявлено с

типом функции, а не указателя функции. Функции в качестве полей

разрешены только в С++.

— G —

General error

Сообщение об ошибке утилиты TLINK

(общая ошибка)

TLINK выводит максимум информации о том, что происходит во

время неизвестной фатальной ошибки.

General error in library file имя_файла in module модуль near module file offsef Oxyyyyyyyy

Сообщение об ошибке утилиты TLINK

(общая ошибка в библиотечном файла в модуле модуль, смещение

Oxyyyyyyyy)

TLINK выводит максимум информации о том, что происходит во

время неизвестной фатальной ошибки.

General error in module модуль near module file offsef Oxyyyyyyyy

Сообщение об ошибке утилиты TLINK

(общая ошибка в модуле модуль, смещение Oxyyyyyyyy)

TLINK выводит максимум информации о том, что происходит во

время неизвестной фатальной ошибки.

Global anonimous union not static

Сообщение об ошибке этапа компиляции

(глобальное анонимное объединение не является статическим)

В С++ глобальное анонимное объединение на уровне файла должно быть статическим (static).

Goto bypassed initialization of local variable

Сообщение об ошибке этапа компиляции

(конструкция goto обошла инициализацию локальной переменной)

В С++ недопустимо любым способом обходить инициализацию локальной переменной. В данном случае в конструкции goto управление

передается за точку инициализации локальной переменной.

Goto into exception handler is not allowed

Сообщение об ошибке этапа компиляции

(переход в обработчик особой ситуации не допускается)

Недопустимый переход в блок try или подключенный к нему обработчик особой ситуации.

Goto statement missing label

Сообщение об ошибке этапа компиляции

(отсутствует метка в операторе goto)

За ключевым словом goto должен следовать идентификатор.

Group группа exceeds 64К

Сообщение об ошибке утилиты TLINK

(группа «группа» превышает 64К)

При комбинировании сегментов размер группы превысил 64К.

Group overflowed maximum size: группа

Сообщение об ошибке этапа компиляции

Общий размер сегментов в группе (например, DGROUP) превысил

64.

Group группа_1 overlaps group группа_2

Предупреждение утилиты TLINK

(группа_1 перекрывает группу_2)

Это означает, что TLINK обнаружил вложенные группы. Данное

предупреждение возникает только при использовании оверлеев или

при компоновке программ Windows.

— H —

Handler for тип_1 hidden by previous handler for тип_2

Предупреждение компилятора

Такое предупреждение выводится, когда обработчик для производного от B типа D задан после обработчика для B, так как обработчик для D в этом случае вызываться не будет.

спецификатор has already been included

Сообщение об ошибке этапа компиляции

(спецификатор уже был включен)

Данный спецификатор типа встречается в объявлении более одного раза. Удалите или измените один из них.

Hexadecimal value contains more than 3 digits

Предупреждение этапа компиляции

(шестнадцатиричное значение содержит более 3 цифр)

В старых версиях Си шестнадцатиричная управляющая последовательность могла иметь не более трех цифр. Новый стандарт ANSI

допускает любое число цифр, лишь бы значение помещалось в байт.

Это сообщение выдается, когда шестнадцатиричная управляющая последовательность имеет много ведущих нулей (например, «x00045»).

Старые версии Си интерпретировали бы данную строку иначе.

функция_1 hides virtual function функция_2

Предупреждение этапа компиляции

(функция_1 скрывает виртуальную функцию_2)

Виртуальная функция базового класса обычно переопределяется

объявлением в производном классе. В данном случае объявление того

же имени с другими типами аргументов делает функцию недоступной

последующим производным классам.

— I —

Identifier expected

Сообщение об ошибке этапа компиляции

(требуется идентификатор)

Здесь ожидался идентификатор, но не был найден. В Си это может случиться в списке параметров старого заголовка функции, после резервируемых слов struct или union при отсутствии фигурных

скобок, а также при отсутствии имени поля структуры или объединения (за исключением битовых полей нулевой длины). В С++ после

двойного двоеточия (::) и после резервируемого слова operator при

отсутствии символа операции идентификатор также требуется в списке базовых классов, производным от которых является данный.

Identifier идентификатор cannot have a type qualifier

Сообщение об ошибке этапа компиляции:

(идентификатор «идентификатор» не может иметь квалификатор

типа)

Квалификатор С++ класс::идентификатор здесь неприменим. Квалификатор не разрешен для имен typedef, объявлений функций (за

исключением определения на уровне файла) или локальных переменных

и параметров функций, либо для элементов класса, за исключением

использования как квалификатора собственного имени класса (избыточно, но допустимо).

If statement missing (

Сообщение об ошибке этапа компиляции

(в операторе if отсутствует ()

В операторе if компилятор не нашел левой (открывающей) круглой скобки после ключевого слова if.

If statement missing )

Сообщение об ошибке этапа компиляции

(В операторе if отсутствует ))

В операторе if компилятор не нашел правой (закрывающей)

круглой скобки после выражения проверки.

If statement too long

Сообщение об ошибке утилиты MAKE

(слишком длинный оператор if)

Оператор if превышает 4096 символов.

Ifdef statement too long

Сообщение об ошибке утилиты MAKE

(слишком длинный оператор ifdef)

Оператор ifdef превышает 4096 символов.

Ifndef statement too long

Сообщение об ошибке утилиты MAKE

(слишком длинный оператор ifndef)

Оператор ifndef превышает 4096 символов.

Ignored модуль, path is too long

Предупреждение утилиты TLIB

(модуль игнорируется, слишком длинный маршрут)

Маршрут к заданному файлу .obj или .lib превышает 64 символа. Максимальный маршрут в TLIB не может превышать 64 символа.

Illegal ACBP byte in SEGDEF

Сообщение об ошибке утилиты TLINK

(недопустимый байт ACBP в SEGDEF)

Обычно это вызывается ошибкой транслятора.

Illegal character in constant expression выражение

Сообщение об ошибке утилиты MAKE

(неверный символ в константном выражении)

Обслуживающая программа МAKE обнаружила некоторый символ,

недопустимый для выражения-константы. Если этим символом является

буква, то это определяет (вероятно) идентификатор, где имеется

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

Illegal component to GRPDEF

Сообщение об ошибке утилиты TLINK

(недопустимый компонент GRPDEF)

Обычно это вызывается ошибкой транслятора.

Illegal group definition: группа

Сообщение об ошибке утилиты TLINK

(недопустимое определения группы)

Данная ошибка вызывается неверно сформированной записью

GRPDEF в файле .OBJ. Это может вызываться «самодельными» файлами

.OBJ или ошибкой транслятора, использованного для генерации файла

.OBJ. Если это происходит в файле, скомпилированном в Borland

C++, перекомпилируйте файл. При сохранении ошибки обратитесь к

фирме Borland.

Illegal initialization

Сообщение об ошибке этапа компиляции

(недопустимая инициализация)

Инициализация может выполняться либо выражением типа константы, либо адресом глобальной extern или static переменной плюс

или минус константа.

Illegal octal digit

Сообщение об ошибке этапа компиляции

(недопустимая восьмеричная цифра)

Компилятор встретил восьмеричную константу с недопустимой в

восьмеричных числах цифрой (8 или 9).

Illegal parameter to __emit__

Сообщение об ошибке этапа компиляции

(недопустимый параметр __emit__)

Вы указали аргумент emit, который не является константой или

адресом.

Illegal pointer substraction

Сообщение об ошибке этапа компиляции

(недопустимое вычитание указателя)

Выдается при попытке вычитания указателя из не указателя.

Illegal structure operation

Сообщение об ошибке этапа компиляции

(недопустимая операция со структурой)

Структуры могут использоваться только в операциях точки (.),

получения адреса (&) или присваивания (=), либо передаваться в

функции и из функций в качестве параметров. Компилятор встретил

структуру, используемую с какой-либо другой операцией.

Illegal to take address of bit field

Сообщение об ошибке этапа компиляции

(недопустимо получать адрес битового поля)

Недопустимо получать адрес битового поля, хотя получать адрес любых других полей можно.

Illegal use of floating point

Сообщение об ошибке этапа компиляции

(недопустимое использование плавающей точки)

Операнды с плавающей точкой недопустимы в операциях сдвига,

поразрядных булевских операциях, обращения по ссылке (*) и некоторых других операциях. Компилятор в качестве операнда одной из

этих операций обнаружил число с плавающей точкой.

Illegal use of member pointer

Сообщение об ошибке этапа компиляции

(недопустимое использование указателя-элемента)

Указатели на классы могут использоваться операциями присваивания, сравнения обращения по ссылке (*), ->*, ?:, && и ||. В исходном файле обнаружен указатель-элемент с какой-либо другой операцией.

Illegal use of pointer

Сообщение об ошибке этапа компиляции

(недопустимое использование указателя)

Указатели могут использоваться операциями сложения, вычитания, присваивания, обращения по ссылке (*) и стрелки (->). В исходном файле обнаружен указатель с какой-либо другой операцией.

Ill-formed pragma

Предупреждение этапа компиляции

(неправильно оформленная директива pragma)

Директива pragma не соответствует ни одной из ожидаемых компилятором директив этого рода.

Image base address must be a multiple of 0x10000

Сообщение об ошибке утилиты TLINK

(базовый адрес модуля должен быть кратен 0x10000)

Базовый адрес должен выравниваться на границу 64К.

Images fixed at specific addresses typically will not run under Win32s

Предупреждение TLINK

(Фиксированные на конкретные адреса модули обычно в Win32

обычно не работают)

В Win32s загружает все приложение в единое адресное пространство. Предсказать, куда будет загружено ваше приложение, невозможно, поскольку перед вашей программой могут загружаться другие программы. Фиксированные образы должны загружаться по заданным адресам, иначе загрузчик не сможет запустить их.

Implicit conversion of тип_1 to тип_2 not allowed

Сообщение об ошибке этапа компиляции

(неявное преобразование типа_1 к типу_2 не допускается)

Когда функция-элемент или класс вызываются с использованием

указателя на производный класс, значение указателя должно неявно

преобразовываться, чтобы указывать на соответствующий базовый

класс. В данном случае такое неявное преобразование недопустимо.

Improper use of typedef идентификатор

Сообщение об ошибке этапа компиляции

(неправильное использование typedef)

Там, где в выражении должна использоваться переменная, указан typedef идентификатор. Проверьте описание идентификатора и

возможные опечатки.

имя_файла(номер_строки): Incompatible attribute

Сообщение об ошибке утилиты TLINK

(несовместимый атрибут)

Компоновщик TLINK обнаружил в операторе CODE или DATA несовместимый атрибут сегмента. Например, PRELOAD и LOADONCALL одновременно не могут быть атрибутами одного и того же сегмента.

Incompatible type conversion

Сообщение об ошибке этапа компиляции

(Несовместимое преобразование типа)

Требуемое приведение типа невозможно.

Incorrect command-line argument: XXX

Сообщение о фатальной ошибке утилиты MAKE

(Неверный аргумент в командной строке: ХХХ)

Данная ошибка появляется, если обслуживающая программа МAKE

выполняется с неверным аргументом в командной строке.

Incorrect command-line option: параметр

Сообщение об ошибке этапа компиляции

(Неправильный параметр командной строки: параметр)

Компилятор не распознает параметр командной строки как допустимый параметр.

Incorrect configuration file option: параметр

Сообщение об ошибке этапа компиляции

(Неправильный параметр файла конфигурации: параметр)

Компилятор не распознает параметр файла конфигурации как допустимый параметр. Проверьте наличие предшествующего дефиса (-).

Incorrect number format

Сообщение об ошибке этапа компиляции

(Неправильный формат числа)

Компилятор обнаружил в шестнадцатиричном числе десятичную

точку.

Incorrect use of default

Сообщение об ошибке этапа компиляции

(Неправильное использование слова default)

Компилятор не нашел после ключевого слова default двоеточия.

Incorrect version of RLINK32.DLL

Сообщение об ошибке утилиты TLINK

(некорректная версия RLINK32.DLL)

Проверьте версию указанной DLL.

Initializing enumeration type with тип

Предупреждение этапа компиляции

(инициализация перечислимого типа указанным типом)

Вы пытаетесь инициализировать переменную enum другим типом.

Например:

         enum count { zero, one, two } x = 2;

что приведет к данному предупреждению, поскольку 2 имеет тип int,

а не enum count. При присваивании или инициализации типов enum на

практике вместо литерального целочисленного значения при программировании лучше использовать идентификатор enum.

Это на самом деле ошибка, но она сводится к предупреждению,

чтобы программа могла работать.

Inline assembly not allowed

Сообщение об ошибке этапа компиляции

(встроенное ассемблер не разрешается)

Ваш исходный файл содержит операторы ассемблера, и вы пытаетесь скомпилировать его из интегрированной среды. Нужно использовать BCC.

Inline assembly not allowed in inline and template function

Сообщение об ошибке этапа компиляции

(встроенное ассемблирование во встраиваемой функции и функ ции-шаблоне запрещено)

Компилятор не может обрабатывать операторы встроенного ассемблирования внутри встраиваемых (inline) функций С++ или шаблонов. Ассемблерные операторы можно оформить в макрокоманду, либо

вы можете убрать класс памяти inline, или можно убрать встроенные

ассемблерные коды.

Int and string types compared

Сообщение об ошибке утилиты MAKE

(сравниваются строковый и целый типы)

В выражении !if или !elseif вы пытаетесь сравнить целочисленный операнд со строковым.

Internal linker error код_ошибки

Сообщение об ошибке утилиты TLINK

(внутренняя ошибка компоновщика)

Ошибка во внутренней логике TLINK. На практике такая ошибка

возникать не должна, но приведена здесь для полноты в случае генерации общей ошибки. Если ошибка сохраняется, запишите код ошибки и свяжитесь с Borland.

Invalid combination of opcode and operands

Сообщение об ошибке этапа компиляции

(Неверная комбинация кода операции и операндов)

Ассемблерный код операции не принимает данную комбинацию операндов. Возможные причины:

  • Слишком много или мало операндов для данного кода опера ции, например INC AX,BX или MOV AX.
  • Число операндов верное, но их типы не соответствуют коду

    операции, например DEC 1, MOV AX,CL или MOV 1,AX.

Invalid entry point offset

Сообщение об ошибке утилиты TLINK

Данное сообщение выводится только при компоновке модулей с

32-битовыми записями. Это означает, что смещение начальной точки

входы программы превышает предел DOS в 32К.

Invalid indirection

Сообщение об ошибке этапа компиляции

(Недопустимое обращение по ссылке)

Операция обращения по ссылке (*) требует в качестве операнда

непустого (не void) указателя.

Invalid limit specified for code segment packingv

Сообщение об ошибке утилиты TLINK

(для упаковки сегмента кода задано недопустимое ограничение)

Данная ошибка происходит, если вы использовали параметр /P

или команду интегрированной среды Options Linker …Pack code

segments и задаете предельное значение размера, выходящее за допустимый диапазон. Чтобы значение было допустимым, оно должно лежать в пределах от 1 до 65536 байт (по умолчанию 8192).

Invalid macro argument separator

Сообщение об ошибке этапа компиляции

(Недопустимый разделитель аргументов макрокоманды)

В определении макрокоманды аргументы должны разделяться запятыми. Компилятор встретил после последнего имени аргумента другой символ разделителя.

Invalid page size value igored

Предупреждение утилиты TLIB

(недопустимое значение размера страницы игнорируется)

Задано недопустимое значение размера страницы. Размер страницы должен быть степенью числа 2 и не может быть меньше 16 или

больше 32768.

Invalid pointer addition

Сообщение об ошибке этапа компиляции

(Недопустимое сложение указателей)

В исходном файле встретилась попытка сложения двух указателей.

Invalid register combination (e.g. [BP+BX])

Сообщение об ошибке этапа компиляции

(Неверная комбинация регистров (например, [BP+BX]))

Допустимыми комбинациями индексных регистров являются [BX],

[BP], [SI], [DI], [BX+SI], [BX+DI], [BP+SI] и [BP+DI]. Другие

комбинации индексных регистров (например, [AX], [BP+BX] и

[SI+DX]) недопустимы.

Локальные переменные (переменные, объявленные в процедурах и

функциях) обычно выделяются в стеке и доступны через регистр BP.

Ассемблер автоматически прибавляет [BP] при ссылках к таким переменным, поэтому даже хотя конструкция типа Local[BX] (где Local это локальная переменная) кажется верной, это не так, поскольку

последний операнд на самом деле станет равным Local[BP+ BX].

Invalid segment definition

Сообщение об ошибке утилиты TLINK

(недопустимое определение сегмента в указанном модуле)

Компилятором создан неверный объектный файл. Если это происходит в файле, созданном Borland C++, перекомпилируйте файл. Если

ошибка остается, свяжитесь с Borland.

Invalid template argument list

Сообщение об ошибке этапа компиляции

(недопустимый список аргументов шаблона)

В описании шаблона за ключевым словом template должен следовать список формальных аргументов, заключенных в угловые скобки

(<>). Найден недопустимый список аргументов шаблона.

Invalid template qualified name шаблон::имя

Сообщение об ошибке этапа компиляции

(недопустимое уточненное имя шаблона)

При определении элемента шаблона класса фактические аргументы имени шаблона класса, которые указываются в левом операнде

операции ::, должны соответствовать формальным аргументам класса

шаблона, например:

         template <class T> class X

 {

 VOID F();

 };

 template <class T> void X<T>::f() {}

Следующее недопустимо:

 template <class T> void X<int>::f() {}

Invalid use of dot

Сообщение об ошибке этапа компиляции

(Недопустимое использование точки)

За операцией «точка» (.) должен непосредственно следовать

операнд.

Invalid use of template шаблон

Сообщение об ошибке этапа компиляции

(недопустимое использование шаблона)

Вне определения шаблона не допускается использование имени

шаблона класса без указания фактических параметров. Например, вы

можете использовать vector<int>, но не vector.

Irreducible expression tree

Фатальная ошибка этапа компиляции

(неупрощаемое дерево выражения)

Это сообщение указывает на некоторую ошибку компилятора. Выражение в указанной строке исходного файла вызвало условие, когда

генератор кода не может выполнить свою работу. Как бы это выражение ни было необходимым, его следует переписать. В случае, если

вы получите такое сообщение, уведомьте об этом фирму Borland.

базовый_класс is indirect virtual base class of класс

Сообщение об ошибке этапа компиляции

(базовый_класс является недопустимым виртуальным базовым

классом для класса класс)

Невозможно создать указатель на элемент С++ заданного виртуального класса. Была попытка создания такого указателя (непосредственно или через приведение). См. описание параметра -Vv в

«Руководстве пользователя».

идентификатор is assigned a value that is never user

Предупреждение этапа компиляции

Переменная встречается в присваивании, но не используется в

функции в завершившейся функции. Предупреждение указывает только,

что компилятор обнаружил закрывающую фигурную скобку.

идентификатор is declared as both external and static

Предупреждение этапа компиляции

(идентификатор объявлен сразу как external и static)

Данный идентификатор появился в объявлении, неявно или явно

обозначающем его как global или external, и кроме того, в объявлении, обозначающем его как static. Идентификатор в таком случае

считается static. Проверьте все описания данного идентификатора.

идентификатор is declared but never used

Предупреждение этапа компиляции

(идентификатор описан, но не используется)

В программе описано имя переменной, но эта переменная не используется. Сообщение указывает, что компилятор обнаружил закрывающую скобку сложного оператора или функции. Описание переменной

находится в начале этого оператора или функции.

конструктор is not a base class of класс

Сообщение об ошибке этапа компиляции

(конструктор не относится к базовому классу класс)

Конструктор класса С++ класс пытается вызвать конструктор

базового класса конструктор, либо вы пытаетесь изменить права

доступа класс::конструктор. Конструктор не относится к базовому

классу класс. Проверьте объявления.

идентификатор is not a member of struct

Сообщение об ошибке этапа компиляции

(идентификатор не является элементом структуры)

Вы пытаетесь сослаться на идентификатор, как на элемент

структуры, в то время как он не является элементом структуры.

Проверьте объявления.

идентификатор is not a non-static data member and can’t be initialized here

Сообщение об ошибке этапа компиляции

В инициализаторах инициализироваться конструктором могут

только данные-элементы. Это сообщение означает, что список включает в себя статический элемент или функцию-элемент.

идентификатор is not a parameter

Сообщение об ошибке этапа компиляции

(идентификатор не является параметром)

В разделе объявления параметров определения функции по образцу старых версий идентификатор объявлен, но не перечислен в

списке параметров. Либо уберите объявление, либо добавьте идентификатор в качестве параметра.

тип is not a polimorphic class type

Сообщение об ошибке этапа компиляции

(тип не является типом полиморфического класса)

Dynamic_cast использовалось с указателем на класс, который

компилировался с запрещенным параметром -RT.

идентификатор is not a public base class of тип_класса

Сообщение об ошибке этапа компиляции

Правый операнд операции .*, ->* или ::operator не был указателем на элемент класса, который идентичен (или неоднозначен)

доступному базовому классу типа операнда в левой части.

имя_файла is not a valid library

Предупреждение утилиты TLINK

(файл не является допустимой библиотекой)

Данный файл не является библиотечным модулем.

элемент is not accessible

Сообщение об ошибке этапа компиляции

(элемент недоступен)

Вы пытаетесь сослаться на элемент класса С++, который имеет

атрибут доступа private или protected и недоступен из данной

функции. Это иногда случается при попытке вызова доступной переопределенной функции-элемента (или конструктора), когда заданные

при этом аргументы совпадают с аргументами недоступной функции.

Перед проверкой доступности всегда выполняется проверка разрешения переопределения. Если проблема именно в этом, то для выбора

желаемой доступной функции попытайтесь явно выполнить приведение

типа для одного или более параметров.

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

  • Remove From My Forums
  • Question

  • /*where is that error? how do i correct it?*/

    Code Block

    #include<iostream.h>
    #define Length 5
    #include<math.h>
    void main()
    {
     float Temp[Length];
     void GetArray(float [], int);
     void PutArray(float [], int);
     float Mean(float [], int);
     float SDev(float [], int);
     GetArray(Temp, Length);
     PutArray(Temp, Length);
     Mean = Mean(Temp, Length);
     cout<<«nAverage Temperature»<<Mean;
     cout<<«nStanard Deviation»<<SDev(Temp, Length);
    }
    void GetArray(float Value[], int Len)
    {
     int I;
     cout<<«Enter values (one per line)n»<<Len;
     for(I=0; I<Len; I++)
     cin>>Value[I];
    }
    void PutArray(float Value[], int Len)
    {
     int I;
     cout<<«The array contains value:»<<Len;
     for(I=0;I<Len;I++)
     cout<<Value[I];
    }
    float Mean(float Value[], int Len)
    {
     float Sum;
     int I;
     for(I=0; I<Len; I++)
     Sum += Value[I];
     return(Sum/Len);
    }
    float SDev(float Value[], int Len)
    {
     int I;
     float SqSum=0, m=Mean(Value, Len);
     for(I=0;I<Len;I++)
     SqSum += pow(Value[I]-m, 2);
     return(sqrt(SqSum/Len));
    }

Answers

  • First thing instead of <iostream.h> use <iostream> then you can use cin and cout etc function with the help of namespace std. And how to use you can see in Following code.

    Code Block

    #include <iostream>

    using namespace std;

    int main()

    {

     cout<<«Hello world»;

     return 0;

    }

    and after that have  alook on the Bold line in the following quites your Function name and return type both have same name it will indicate to compiler that you are trying to overload the Function remove mean and use some other valid name like float if you wann you can replace two Bold line by following code and it will work proper for you

    Code Block

    float fVal =0.0;
    fVal = Mean(Temp, Length);
    cout<<«nAverage Temperature»<<fVal;

I am getting a lot of errors with my C — code, with regards to malloc and illegal use of floating point.

Code:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define PI 3.14159265358


// Define functions
void calculate_impedance(double* result_table[6], int components_type[], double component_value[], int component_number, int source_voltage, int frequency, int circuit_type);
void print_results(double* result_table[6], int component_number, int component_type[]); // Function to print result


int i;
double temp_impedRR, temp_impedCR, temp_impedlR, temp_impedReal, temp_impedImag, temp_impedRI, temp_impedCI, temp_impedlI; // impedance variables
double voltreal_R, voltimag_R, voltreal_C, voltimag_C, voltreal_L, voltimag_L, total_voltReal, total_voltImag; // voltage variables (real voltage, imaginary voltage and total voltage - for each item R = resistor, C - capacitor and i - inductor)
double curreal_R, curimag_R, curreal_C, curimag_C, curreal_L, curimag_L, total_curReal, total_curImag; // Current variables (real current, imaginary current and total current)
int main()
{


    //Define variables
    int parallel;
    int series;
    int frequency;
    int source_voltage;
    int component_number;
    int circuit_type; 
    float Zr;
    float Zc;
    float Zl;
    double Zrc_real;
    double Zrc_imag;
    double current_real;
    double current_imag;
    double Vr, Vc, Vl;
    double Ir;
    double Ic_real;
    double Ic_imag;
    double Il_real;
    double Il_imag;
    int i;
    double* result_table[6];
    
    
    
    


    
    // Printf statements to get the user input
    printf("**17763564 Ananth Kadekodi Assignment 2**n");
    
    printf("Do you want to create a 1.Parallel or 2.Series circuit evaluation?n");
    scanf("%d", &circuit_type);
    
    printf("Enter the frequency in Hertz of the source: n");
    scanf("%d", &frequency);
    
    printf("Enter the source source_voltage: n");
    scanf("%d", &source_voltage);
        
    printf("How many components are present n"); // number of components
    scanf("%d", &component_number);
    
    
    //for loop to allcate malloc memory
    for(i=0; i < 6; i++)
    {
        result_table[i] = malloc((component_number+1)*sizeof(double)); //allocate malloc memory for 3D array
            
    }
    
    result_table[4][component_number] = source_voltage;
    result_table[5][component_number] = 0;
        
    // allocating memory for component_type and component_values
    int* component_type = malloc((component_number)*sizeof(int));
    double* component_value = malloc((component_number)*sizeof(double));
    int* type_ptrPosition = component_type; // pointer calculation done
    double* value_ptrPosition = component_value;// pointer calculation done
    
    


    switch(circuit_type) // Switch - Case statements for user input
    {


        case 1: 
        
            // For- loop for the component_number
            for (i = 0; i < component_number; i++)
            {
                printf("Enter the component type for each component where 1 is resistor, 2 is capacitor and 3 is inductorn");
                scanf("%d", &type_ptrPosition);
                
                
                if (component_type[i] == 1)
                {
                    printf("Component %d: n", (i+1));
                    printf("Enter the component_value of the component in Ohms: n");
                    scanf("%lf", &value_ptrPosition);
                    
                } else if (component_type[i]== 2)
                {
                    printf("Component %d: n", (i+1));
                    printf("Enter the component_value of the component in Farads: n");
                    scanf("%lf", &value_ptrPosition);
                
                } else if (component_type[i] == 3)
                {
                    printf("Component %d: n", (i+1));
                    printf("Enter the component_value of the component_number in Henrys: n");
                    scanf("%lf", &value_ptrPosition);
                    
                }
                
                calculate_impedance(&result_table[6], component_type, component_value, component_number, frequency, circuit_type, source_voltage);
                print_results(&result_table[6], component_number, component_type);
                
                
                type_ptrPosition++;
                value_ptrPosition++;    
            }
            
            break;
            
        case 2:
            
        
            
            for (i = 0; i < component_number; i++)
            {
                printf("Enter the component type for each component where 1 is resistor, 2 is capacitor and 3 is inductorn");
                scanf("%d", &type_ptrPosition);
                
                    
                if (component_type[i] == 1)
                {
                    printf("Component %d: n", (i+1));
                    printf("Enter the component_value of the component in Ohms: n");
                    scanf("%lf", &value_ptrPosition);
                    
                } else if (component_type[i] == 2)
                {
                    printf("Component %d: n", (i+1));
                    printf("Enter the component_value of the component in Farads: n");
                    scanf("%lf", &value_ptrPosition);
                
                } else if (component_type[i] == 3)
                {
                    printf("Component %d: n", (i+1));
                    printf("Enter the component_value of the component_number in Henrys: n");
                    scanf("%lf", &value_ptrPosition);
                    
                }
                
                calculate_impedance(&result_table[6], component_type, component_value, component_number, frequency, circuit_type, source_voltage);
                print_results(&result_table[6], component_number, component_type);
                
                type_ptrPosition++;
                value_ptrPosition++;
            }
            
            
            break;
            
        default:
            
            printf("You have specified an invalid inputn");
            printf("n n");
    }
    
    return 0;
    
}


// Calculation impedance function
void calculate_impedance(double *result_table[6], int component_type[], double component_value[], int component_number, int frequency, int circuit_type, int source_voltage)
{
    //define variables


    
    // CR = Capacitance real, voltimag_C (imaginary value of voltage capacitance), curreal_R - real value of current resistor, total_curReal - total real current values


    
    if(circuit_type == 1)
    {
        for (i=0; i< component_number; i++)
        {
            if(component_type[i] == 1)
            {
                // calculations
                temp_impedRR = component_value; // Impedance real part of resistor
                temp_impedRI = 0;
                voltreal_R = source_voltage;
                voltimag_R = 0;
                curreal_R = (source_voltage/component_value);
                curimag_R = 0;
                *result_table[0][i] = temp_impedRR; // Store values in array
                *result_table[1][i] = temp_impedRI;
                *result_table[4][i] = voltreal_R;
                *result_table[5][i] = voltimag_R;
                *result_table[2][i] = curreal_R;
                *result_table[3][i] = curimag_R;
                
            }else if (component_type[i] == 2)
            {
                temp_impedCI = (double)(0-(1/(2*PI*frequency*component_value)));
                temp_impedCR = 0;
                voltreal_C = source_voltage; // voltage real value of capacitor
                voltimag_C = 0;
                curreal_C = ((source_voltage*0)+(0*temp_impedCI))/((0*0)+(temp_impedCI*temp_impedCI)); // current real value of capacitor
                curimag_C = ((0*0)-(source_voltage*temp_impedCI))/((0*0)+(temp_impedCI*temp_impedCI)); // current imaginary value of capacitor
                *result_table[0][i] = temp_impedRR; // store values in array
                *result_table[1][i] = temp_impedRI;
                *result_table[4][i] = voltreal_C;
                *result_table[5][i] = voltimag_C;
                *result_table[3][i] = curreal_C;
                *result_table[4][i] = curimag_C;
            
        }else if (component_type[i] == 3)
        {
            temp_impedlR = 0;
            temp_impedlI = (2*PI*frequency*component_value);
            voltreal_L = source_voltage;
            voltimag_L = 0;
            curreal_L = ((source_voltage*0)+(0*temp_impedlI))/((0*0)+(temp_impedlI*temp_impedlI));
            curimag_L = ((0*0)-(source_voltage*temp_impedlI))/((0*0)+(temp_impedlI*temp_impedlI));
        
            *result_table[0][i] = temp_impedlR;
            *result_table[1][i]    = temp_impedlI;        
            *result_table[4][i] = voltreal_L;
            *result_table[5][i] = voltimag_L;
            *result_table[3][i] = curreal_L;
            *result_table[3][i] = curimag_L;
                
        }
                
            temp_impedReal = (((temp_impedRR*0)+(0*temp_impedlI))/((0*0)+(temp_impedlI*temp_impedlI))); // Temporary impedance real value
            
            temp_impedImag = ((temp_impedRR*0)-(temp_impedRR*temp_impedlI))/((0*0)+(temp_impedlI*temp_impedlI)); // Temporary impedance imaginary
        
            imped_real = ((temp_impedReal*0)+(temp_impedImag*temp_impedlI))/((0*0)+(temp_impedlI*temp_impedlI)); // Total impedance real
            *result_table[0][component_number] = imped_real; // store in Array
            imped_imag = ((temp_impedImag*0)-(temp_impedReal*temp_impedlI))/((0*0)+(temp_impedlI*temp_impedlI)); // Total impedance imaginary
            *result_table[1][component_number] = imped_imag; // store in array
            
            
            total_curReal = (((source_voltage*imped_real)+(0*imped_imag))/((imped_real*imped_real)+(imped_imag*imped_imag))); // Total current real
            *result_table[2][component_number] = total_curReal;
        
            total_curImag = ((0*imped_real)-(source_voltage*imped_imag))/((imped_real*imped_real)+(imped_imag*imped_imag)); // Total current imaginary
            *result_table[3][component_number] = total_curReal;
            
        }
        
    }    
    else if (circuit_type == 2)
    {
        for (i=0; i< component_number; i++)
        {
            
            if(component_type[i] == 1)
            {
                temp_impedRR = component_value; // Temp total impedance of Resistor Real
                temp_impedRI = 0; // Temp total impedance of Resistor Imaginary


            }else if (component_type[i] == 2)
            {
                temp_impedCR = 0-(1/(2*PI*frequency*component_value));
                temp_impedCI = 0;
                
            }else if(component_type[i] == 3)
            {
                temp_impedlR = (2*PI*frequency*component_value);  // Temp total impedance of inductor Real
                temp_impedlI = 0; // Temp total impedance of inductor imaginary
                
            }
            
            temp_impedReal = (temp_impedRR + 0);
            temp_impedImag = (0 + temp_impedCR);
            imped_real = (temp_impedRReal + 0);
            *result_table[0][component_number] = imped_real;
            imped_imag = (temp_impedImag + temp_impedlR);
            *result_table[1][component_number] = imped_imag;
            
            total_curReal = ((source_voltage*imped_real)+(0*imped_imag)/((imped_real*imped_real)+(imped_imag*imped_imag));
            *result_table[2][component_number] = total_curReal;
            *result_table[2][i] = total_curReal;
        
            total_curImag = ((0*out3_real)-(source_voltage*imped_imag))/((imped_real*imped_real)+(imped_imag*imped_imag));
            *result_table[3][component_number] = total_curImag;
            *result_table[3][i] = total_curImag;
        
            if(component_type[i] == 1)
            {
                voltreal_R = ((temp_impedRR*total_curReal)-(temp_impedRI*total_curImag));
                voltimag_R = ((temp_impedRI*tatal_curReal)+(temp_impedRR*total_curImag));
                *result_table[4][i] = voltreal_R;
                *result_table[5][i] = voltimag_R;
                
            }else if(component_type[i] == 2)
            {
                voltreal_C = ((temp_impedCR*total_curReal)-(temp_impedCI*total_curImag));
                voltimag_C = ((temp_impedCI*tatal_curReal)+(temp_impedCR*total_curImag));
                *result_table[4][i] = voltreal_C;
                *result_table[5][i] = voltimag_C;
                
            }else if(component_type[i] == 3)
            {
                voltreal_L = ((temp_impedlR*total_curReal)-(temp_impedlI*total_curImag)); // Total voltage real value of inductor
                voltimag_L = ((temp_impedRlI*tatal_curReal)+(temp_impedlR*total_curImag));    // Total voltage imaginary value of inductor
                *result_table[4][i] = voltreal_L;
                *result_table[5][i] = voltimag_L;
            }
        }
            
    }


    
void print_results(double *result_table[6], int component_number, int component_type) // Function to print result
    {
        //Declare variable
        int i,j;
        
        // Print results
        printf("COMPONENTS ");
        printf("           |              R             ");
        
        printf("                                        |              C             ");
        printf("                                                                                    I             |");
        printf("                                                                                                              Total        |n");
        printf("Z ( Ohms ) |"); 
        for(i=0; i < 1; i++)
        {
            for (j=0; j <= 6; j++ ) // For loop to print out array row 0 and 1
            {
                 printf("| %lf% |", &result_table[0][j]);
                 printf("%lf%", &result_table[1][j]);
            }    
        }
        printf("n");
        printf("I ( Amps ) |");
        for(i=0; i < 1; i++) // For loop to print out array 2 and 3
        {
            for (j=0; j <= 6; j++ )
            {
                 printf("| %lf% |", &result_table[2][j]);
                 printf("%lf%", &result_table[3][j]);
            }    
        }
        printf("n");
        printf("V ( Volts) |");
        for(i=0; i < 1; i++) // For loop to print out array 4 and 5
        {
            for (j=0; j <= 6; j++ )
            {
                 printf("| %lf% |", &result_table[4][j]);
                 printf("%lf%", &result_table[5][j]);
            }    
        }
    
    }        
}

Error E2140 codeeditedp1.c 72: Declaration is not allowed here in function main
Error E2140 codeeditedp1.c 73: Declaration is not allowed here in function main
Error E2140 codeeditedp1.c 74: Declaration is not allowed here in function main
Error E2140 codeeditedp1.c 75: Declaration is not allowed here in function main
Error E2060 codeeditedp1.c 187: Illegal use of floating point in function calculate_impedance
Error E2087 codeeditedp1.c 191: Illegal use of pointer in function calculate_impedance
Error E2060 codeeditedp1.c 193: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 194: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 195: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 196: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 197: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 198: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 202: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 208: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 209: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 210: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 211: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 212: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 213: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 218: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 224: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 225: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 226: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 227: Illegal use of floating point in function calculate_impedance
Error E2060 codeeditedp1.c 228: Illegal use of floating point in function calculate_impedance
Error E2228 codeeditedp1.c 228: Too many error or warning messages in function calculate_impedance

Содержание

  1. C Compiler Error messages
  2. C Programming — List of ‘C’ Compiler Error messages for the Borland compiler
  3. Constant expression required
  4. Could not find file ‘filename’
  5. Declaration missing ;
  6. Declaration syntax error
  7. Default outside of switch
  8. Define directive needs an identifier
  9. Division by zero
  10. do statement must have while
  11. do-while statement missing (
  12. do-while statement missing (
  13. do-while statement missing OR For statement missing ;
  14. Duplicate case
  15. Enum syntax error
  16. Error directive: ‘message’
  17. Error writing output file
  18. Expression syntax
  19. Possible Causes
  20. Extra parameter in call
  21. Extra parameter in call to function
  22. File name too long
  23. for statement missing (
  24. for statement missing )
  25. for statement missing ;
  26. Function call missing ) — Compiler Error
  27. Goto statement missing label
  28. Identifier expected
  29. if statement missing (
  30. if statement missing )
  31. Illegal character ‘character’ (‘value’)
  32. Illegal initialization
  33. Illegal octal digit
  34. Illegal parameter to _ _emit_ _
  35. Illegal pointer subtraction
  36. Illegal structure operation
  37. Illegal use of floating point
  38. Illegal use of pointer
  39. Improper use of typedef ‘identifier’
  40. Inline assembly not allowed
  41. Incompatible type conversion
  42. Incorrect number format
  43. Incorrect use of default
  44. Invalid indirection
  45. Invalid macro argument separator
  46. Invalid pointer addition
  47. Invalid use of dot
  48. Lvalue required
  49. Macro argument syntax error
  50. Macro expansion too long
  51. Misplaced break
  52. Misplaced continue
  53. Misplaced decimal point
  54. Misplaced elif directive
  55. Misplaced else
  56. Misplaced else directive
  57. Misplaced endif directive
  58. Must take address of a memory location
  59. No file name ending
  60. Non-portable pointer comparison
  61. Non-portable pointer conversion
  62. Not an allowed type
  63. Numeric constant too large
  64. Out of memory
  65. Pointer to structure required on left side of -> or ->*
  66. Side effects are not allowed
  67. Size of ‘identifier’ is unknown or zero
  68. Statement missing ;
  69. Structure size too large
  70. Subscripting missing ]
  71. Switch missing (
  72. Switch missing )
  73. Too few parameters in call
  74. Too many cases
  75. Too many decimal points
  76. Too many default cases
  77. Too many error or warning messages
  78. Too many exponents
  79. Too many initializers
  80. Too many storage classes in declaration
  81. Too many types in declaration
  82. Too much global data defined in file
  83. Two consecutive dots
  84. Type mismatch in parameter ‘parameter’
  85. Type mismatch in parameter ‘parameter’ in call to ‘function’
  86. Type mismatch in parameter ‘number’ in call to ‘function’
  87. Type mismatch in redeclaration of ‘identifier’
  88. Unable to create output file ‘filename’
  89. Unable to open include file ‘filename’
  90. Unable to open input file ‘filename’
  91. Undefined label ‘identifier’
  92. Undefined structure ‘structure’
  93. Undefined symbol ‘identifier’
  94. Unexpected end of file in comment started on ‘line number’
  95. Unexpected end of file in conditional started on ‘line number’
  96. Обработка ошибок в C
  97. Введение
  98. Переменная errno и коды ошибок
  99. Функции работы с errno
  100. Макрос assert()
  101. Функции atexit(), exit() и abort()
  102. Функции setjmp() и longjmp()

C Compiler Error messages

C Programming — List of ‘C’ Compiler Error messages for the Borland compiler

Constant expression required

Could not find file ‘filename’

Declaration missing ;

Declaration syntax error

Default outside of switch

The compiler encountered a default statement outside a switch statement.

This is most commonly caused by mismatched braces.

Define directive needs an identifier

Division by zero

A divide or remainder expression had a literal zero as a divisor.

Example of avoiding this error Tut. 6

do statement must have while

do-while statement missing (

In a oo. while statement there is a missing ( bracket. for, if, switch, or while statement, the compiler found no left parenthesis after the while keyword or test expression.

do-while statement missing (

do-while statement missing OR For statement missing ;

Duplicate case

Enum syntax error

Error directive: ‘message’

Error writing output file

A DOS error that prevents the C++ IDE from writing an .OBJ, .EXE, or temporary file.

Solutions
Make sure that the Output directory in the Directories dialog box is a valid directory.

Check that there is enough free disk space. Delete unneeded files and try again.
Possible faulty disk

Expression syntax

Possible Causes

This is most commonly caused by one of the following: two consecutive operators mismatched or missing parentheses a missing semicolon on the previous statement.

Solutions

If the line where the error occurred looks syntactically correct, look at the line directly above for errors.

Try moving the line with the error to a different location in the file and recompiling.

If the error still occurs at the moved statement, the syn tax error is occurring somewhere in that statement.

If the error occurred in another statement, the syn tax error is probably in the surrounding code.

File name too long

for statement missing (

for statement missing )

for statement missing ;

Function call missing ) — Compiler Error

Goto statement missing label

Identifier expected

if statement missing (

if statement missing )

Illegal character ‘character’ (‘value’)

Illegal initialization

Illegal octal digit

Illegal parameter to _ _emit_ _

There are some restrictions on inserting literal values directly into your code with the __emit__ function.

For example, you cannot give a local variable as a parameter to __emit__.

Illegal pointer subtraction

Illegal structure operation

Structures can only be used with dot (.), address-of (&) or assignment (=) operators, or be passed to or from a function as parameters.

The compiler encountered a structure being used with some other operator.

Illegal use of floating point

Illegal use of pointer

Improper use of typedef ‘identifier’

Your source file used a typedef symbol where a variable should appear in an expression.

Check for the declaration of the symbol and possible misspellings.

Inline assembly not allowed

Your source file contains inline assembly language statements and you are compiling it from within the integrated environment.

You must use the BCC command to compile this source file from the DOS command line.

Incompatible type conversion

Incorrect number format

Incorrect use of default

Invalid indirection

Invalid macro argument separator

In a macro definition, arguments must be separated by commas.

The compiler encountered some other chr. after an argument name.

This is correct:
#define tri_add(a, b, c) ((a) + (b) + (c))
This is incorrect:
#define tri_add(a b. c) ((a) + (b) + (c))

Invalid pointer addition

Invalid use of dot

Lvalue required

Macro argument syntax error

Macro expansion too long

Misplaced break

Misplaced continue

Misplaced decimal point

Misplaced elif directive

Misplaced else

The compiler encountered an else statement without a matching if statement.

Possible Causes

  • An extra «else» statement
  • An extra semicolon
  • Missing braces
  • Some syntax error in a previous «if» statement

Misplaced else directive

Misplaced endif directive

Must take address of a memory location

No file name ending

Non-portable pointer comparison

(Command-line equivalent for controling display of this warning=-wcpt)

Your source file compared a pointer to a non-pointer other than the constant 0.

You should use a cast to suppress this warning if the comparison is proper.

Non-portable pointer conversion

(Command-line for controling display=-wrpt)

An implicit conversion between a pointer and an integral type is required, but the types are not the same size.

This can’t be done without an explicit cast.

This conversion might not make any sense, so be sure this is what you want to do.

Not an allowed type

Numeric constant too large

/*Bordland */
String and chr. escape sequences larger than hexadecimal or octal 77 can’t be generated.
Two-byte chr. constants can be specified by using a second backslash. For example,
\ represents a two-byte constant. A numeric literal following an escape sequence should be broken up like this:
printf(«» «12345»);
This prints a carriage return followed by 12345.

/*T223 */
String and chr. escape sequences larger than hexadecimal xFF or octal 77 can’t be generated.
Two-byte chr. constants can be specified by using a second backslash. For example,
Dx0A represents a two-byte constant. A numeric literal following an escape sequence should be broken up like this:

following an escape sequence should be broken up like this:
printf(«x0D» «12345»);
This prints a carriage return followed by 12345.

Out of memory

The total working storage is exhausted.

This error can occur in the following circumstances:

  • Not enough virtual memory is available for compiling a particular file. In this case, shut down any other concurrent applications. You may also try to re-configure your machine for more available virtual memory, or break up the source file being compiled into smaller separate components. You can also compile the file on a system with more available RAM.
  • The compiler has encountered an exceedingly complex or long expression at the line indicated and has insufficient reserves to parse it. Break the expression down into separate statements.

Pointer to structure required on left side of -> or ->*

Nothing but a pointer is allowed on the left side of the arrow (->) in C or C++.

In C++ a -> operator is allowed.

Side effects are not allowed

Side effects such as assignments, ++, or — are not allowed in the debugger watch window.

A common error is to use x=y (not allowed) instead of x==y to test the equality of x and y.

Size of ‘identifier’ is unknown or zero

This identifier was used in a context where its size was needed.

A struct tag might only be declared (the struct not defined yet), or an extern array might be declared without a size.

It’s not allowed to have some references to such an item (like sizeof) or to dereference a pointer to this type.

Rearrange your declaration so that the size of ‘identifier’ is available.

Statement missing ;

The compiler encountered an expression statement without a semicolon following it.

Structure size too large

Subscripting missing ]

Switch missing (

Switch missing )

Too few parameters in call

A call to a function with a prototype (via a function pointer) had too few arguments.

Prototypes require that all parameters be given.

Make certain that your call to a function has the same parameters as the function prototype.

Too many cases

Too many decimal points

Too many default cases

Too many error or warning messages

Too many exponents

Too many initializers

Too many storage classes in declaration

Too many types in declaration

Too much global data defined in file

The sum of the global data declarations exceeds 64K bytes. This includes any data stored in the DGROUP (all global variables, literal strings, and static locals).

Solutions
Check the declarations for any array that might be too large. You can also remove variables from the DGROUP.

Here’s how:

  • Declare the variables as automatic. This uses stack space.
  • Dynamically allocate memory from the heap using calloc, malloc, or farmalloc for the variables. This requires the use of pointers.
  • Declare variables with the _far16 keyword. This puts variables in their own far data segment. (Limits you to running one instance of your app under Windows.)

Literal strings are also put in the DGROUP. Get the file farstr.zip from our BBS to extract literal strings into their own segment.

Two consecutive dots

Type mismatch in parameter ‘parameter’

Type mismatch in parameter ‘parameter’ in call to ‘function’

Your source file declared the function called via a function pointer with a prototype.

However, the named parameter could not be converted to the declared parameter type.

When compiling C++ programs, this message is always preceded by another message that explains the exact reason for the type mismatch.

That other message is usually «Cannot convert ‘type1’ to ‘type2′» but the mismatch might be due to many other reasons.

Type mismatch in parameter ‘number’ in call to ‘function’

Your source file declared the named function with a prototype, and the given parameter number (counting left to right from 1) could not be converted to the declared parameter type.

When compiling C++ programs, this message is always preceded by another message that explains the exact reason for the type mismatch.

That other message is usually «Cannot convert ‘type1’ to ‘type2′», but the mismatch might be due to many other reasons.

Type mismatch in redeclaration of ‘identifier’

Your source file redeclared a variable with a different type than was originally declared for the variable.

Possible Causes
This can occur if a function is called and subsequently declared to return something other than an integer.

Solutions
If this has happened, you must declare the function before the first call to it.

Unable to create output file ‘filename’

This error occurs if the work disk is full or write protected.

This error also occurs if the output directory does not exist.

Solutions
If the disk is full, try deleting unneeded files and restarting the compilation.

If the disk is write-protected, move the source files to a writable disk and restart the compilation.

Unable to open include file ‘filename’

The compiler could not find the named file.

Possible Causes

  • The named file does not exist.
  • An #include file included itself.
  • You do not have FILES set in CONFIG.SYS on your root directory.

Solutions

  • Verify that the named file exists.
  • Set FILES=20 in CONFIG.SYS.

Unable to open input file ‘filename’

This error occurs if the source file can’t be found.

Check the spelling of the name. Make sure the file is on the specified disk or directory.

Check under Options|Settings|Directories and verify that the proper directory paths are listed. If multiple paths are required, use a semi-colon to separate them, like this:
C:bclib;C:bcowllib
or
C:T223TURBOCLIB

Undefined label ‘identifier’

The named label has a goto in the function, but no label definition.

Undefined structure ‘structure’

(Command-line equivalent for controling display of this warning=-wstu)

The named structure was used in the source file, probably on a pointer to a structure, but had no definition in the source file.

This is probably caused by a misspelled structure name or a missing declaration.

Undefined symbol ‘identifier’

The named identifier has no declaration.

Possible Causes

  • actual declaration of identifier has been commented out.
  • misspelling, either at this point or at the declaration.
  • there was an error in the declaration of the identifier.

Tools to help track down the problem:

  • CPP
  • GREP

Unexpected end of file in conditional started on ‘line number’

The source file ended before the compiler (or MAKE) encountered #endif.

The #endif either was missing or misspelled.

Every #if statement needs a matching #endif statement.

Источник

Обработка ошибок в C

Введение

Переменная errno и коды ошибок

errno – переменная, хранящая целочисленный код последней ошибки. В каждом потоке существует своя локальная версия errno, чем и обусловливается её безопасность в многопоточной среде. Обычно errno реализуется в виде макроса, разворачивающегося в вызов функции, возвращающей указатель на целочисленный буфер. При запуске программы значение errno равно нулю.

Все коды ошибок имеют положительные значения, и могут использоваться в директивах препроцессора #if. В целях удобства и переносимости заголовочный файл определяет макросы, соответствующие кодам ошибок.

Стандарт ISO C определяет следующие коды:

  • EDOM – (Error domain) ошибка области определения.
  • EILSEQ – (Error invalid sequence) ошибочная последовательность байтов.
  • ERANGE – (Error range) результат слишком велик.

Прочие коды ошибок (несколько десятков) и их описания определены в стандарте POSIX. Кроме того, в спецификациях стандартных функций обычно указываются используемые ими коды ошибок и их описания.

Нехитрый скрипт печатает в консоль коды ошибок, их символические имена и описания:

Если вызов функции завершился ошибкой, то она устанавливает переменную errno в ненулевое значение. Если же вызов прошёл успешно, функция обычно не проверяет и не меняет переменную errno. Поэтому перед вызовом функции её нужно установить в 0 .

Как видите, описания ошибок в спецификации функции iconv() более информативны, чем в .

Функции работы с errno

Получив код ошибки, хочется сразу получить по нему её описание. К счастью, ISO C предлагает целый набор полезных функций.

void perror(const char *s);

Печатает в stderr содержимое строки s , за которой следует двоеточие, пробел и сообщение об ошибке. После чего печатает символ новой строки ‘n’ .

char* strerror(int errnum);
Возвращает строку, содержащую описание ошибки errnum . Язык сообщения зависит от локали (немецкий, иврит и даже японский), но обычно поддерживается лишь английский.

strerror() не безопасная функция. Во-первых, возвращаемая ею строка не является константной. При этом она может храниться в статической или в динамической памяти в зависимости от реализации. В первом случае её изменение приведёт к ошибке времени выполнения. Во-вторых, если вы решите сохранить указатель на строку, и после вызовите функцию с новым кодом, все прежние указатели будут указывать уже на новую строку, ибо она использует один буфер для всех строк. В-третьих, её поведение в многопоточной среде не определено в стандарте. Впрочем, в QNX она объявлена как thread safe.

Поэтому в новом стандарте ISO C11 были предложены две очень полезные функции.

size_t strerrorlen_s(errno_t errnum);

Возвращает длину строки с описанием ошибки errnum .

errno_t strerror_s(char *buf, rsize_t buflen, errno_t errnum);

Копирует строку с описание ошибки errnum в буфер buf длиной buflen .

Функции входят в Annex K (Bounds-checking interfaces), вызвавший много споров. Он не обязателен к выполнению и целиком не реализован ни в одной из свободных библиотек. Open Watcom C/C++ (Windows), Slibc (GNU libc) и Safe C Library (POSIX), в последней, к сожалению, именно эти две функции не реализованы. Тем не менее, их можно найти в коммерческих средах разработки и системах реального времени, Embarcadero RAD Studio, INtime RTOS, QNX.

Стандарт POSIX.1-2008 определяет следующие функции:

char *strerror_l(int errnum, locale_t locale);

Возвращает строку, содержащую локализованное описание ошибки errnum , используя locale . Безопасна в многопоточной среде. Не реализована в Mac OS X, FreeBSD, NetBSD, OpenBSD, Solaris и прочих коммерческих UNIX. Реализована в Linux, MINIX 3 и Illumos (OpenSolaris).

int strerror_r(int errnum, char *buf, size_t buflen);

Копирует строку с описание ошибки errnum в буфер buf длиной buflen . Если buflen меньше длины строки, лишнее обрезается. Безопасна в многоготочной среде. Реализована во всех UNIX.

Увы, никакого аналога strerrorlen_s() в POSIX не определили, поэтому длину строки можно выяснить лишь экспериментальным путём. Обычно 300 символов хватает за глаза. GNU C Library в реализации strerror() использует буфер длиной в 1024 символа. Но мало ли, а вдруг?

Макрос assert()

Макрос, проверяющий условие expression (его результат должен быть числом) во время выполнения. Если условие не выполняется ( expression равно нулю), он печатает в stderr значения __FILE__ , __LINE__ , __func__ и expression в виде строки, после чего вызывает функцию abort() .

Функции atexit(), exit() и abort()

int atexit(void (*func)(void));

Регистрирует функции, вызываемые при нормальном завершении работы программы в порядке, обратном их регистрации. Можно зарегистрировать до 32 функций.

_Noreturn void exit(int exit_code);

Вызывает нормальное завершение программы, возвращает в среду число exit_code . ISO C стандарт определяет всего три возможных значения: 0 , EXIT_SUCCESS и EXIT_FAILURE . При этом вызываются функции, зарегистрированные через atexit() , сбрасываются и закрываются потоки ввода — вывода, уничтожаются временные файлы, после чего управление передаётся в среду. Функция exit() вызывается в main() при выполнении return или достижении конца программы.

Главное преимущество exit() в том, что она позволяет завершить программу не только из main() , но и из любой вложенной функции. К примеру, если в глубоко вложенной функции выполнилось (или не выполнилось) некоторое условие, после чего дальнейшее выполнение программы теряет всякий смысл. Подобный приём (early exit) широко используется при написании демонов, системных утилит и парсеров. В интерактивных программах с бесконечным главным циклом exit() можно использовать для выхода из программы при выборе нужного пункта меню.

_Noreturn void abort(void);

Вызывает аварийное завершение программы, если сигнал не был перехвачен обработчиком сигналов. Временные файлы не уничтожаются, закрытие потоков определяется реализацией. Самое главное отличие вызовов abort() и exit(EXIT_FAILURE) в том, что первый посылает программе сигнал SIGABRT , его можно перехватить и произвести нужные действия перед завершением программы. Записывается дамп памяти программы (core dump file), если они разрешены. При запуске в отладчике он перехватывает сигнал SIGABRT и останавливает выполнение программы, что очень удобно в отладке.

Вывод в отладчике:

В случае критической ошибки нужно использовать функцию abort() . К примеру, если при выделении памяти или записи файла произошла ошибка. Любые дальнейшие действия могут усугубить ситуацию. Если завершить выполнение обычным способом, при котором производится сброс потоков ввода — вывода, можно потерять ещё неповрежденные данные и временные файлы, поэтому самым лучшим решением будет записать дамп и мгновенно завершить программу.

В случае же некритической ошибки, например, вы не смогли открыть файл, можно безопасно выйти через exit() .

Функции setjmp() и longjmp()

Вот мы и подошли к самому интересному – функциям нелокальных переходов. setjmp() и longjmp() работают по принципу goto, но в отличие от него позволяют перепрыгивать из одного места в другое в пределах всей программы, а не одной функции.

int setjmp(jmp_buf env);

Сохраняет информацию о контексте выполнения программы (регистры микропроцессора и прочее) в env . Возвращает 0 , если была вызвана напрямую или value , если из longjmp() .

void longjmp(jmp_buf env, int value);

Восстанавливает контекст выполнения программы из env , возвращает управление setjmp() и передаёт ей value .

Используя setjmp() и longjmp () можно реализовать механизм исключений. Во многих языках высокого уровня (например, в Perl) исключения реализованы через них.

Внимание! Функции setjmp() и longjmp () в первую очередь применяются в системном программировании, и их использование в клиентском коде не рекомендуется. Их применение ухудшает читаемость программы и может привести к непредсказуемым ошибкам. Например, что произойдёт, если вы прыгните не вверх по стеку – в вызывающую функцию, а в параллельную, уже завершившую выполнение?

Источник

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Ошибка http 410
  • Ошибка igdkmd64 sys windows 10
  • Ошибка http 406 неприемлемо как исправить
  • Ошибка http 404 запрошенный ресурс не найден как исправить
  • Ошибка iertutil dll

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии