Ошибка переменная не является указателем

syrga

7 / 7 / 4

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

Сообщений: 65

1

Ошибка: переменная не является указателем

04.12.2012, 17:56. Показов 12594. Ответов 1

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


Студворк — интернет-сервис помощи студентам

в чем ошибка? помогите…

Pascal
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
Program Laba6;
Uses Crt;
Var n:integer;
c,b,z,a,x:real;
Begin
writeln('âûáåðèòå íîìåð ôóíêöèè:');
writeln('1.|-x^3+4x+31|');
writeln('2.cos(3x-ðy/2)^5');
writeln('3.tg(4y/ð)');
writeln('4.x^3/2-2y+1');
read(n);
if n=1 then
begin
writeln('ââåäèòå x:');
read(x);
z:=-x^3+4*x+31;
w:=abs(z);
writeln('w=',w);
end;
if n=2  then
begin
writeln('ââåäèòå x:');
readln(x);
writeln('ââåäèòå y:');
readln(y);
a:= cos(3*x-ð*y/2)^5;
writeln('a=',a);
end;
if n=3    then
begin
writeln('ââåäèòå p:');
readln(p);
writeln('ââåäèòå y:');
readln(y);
b:= arctan(4*y/ð);
writeln('b=',b);
end;
if n=4   then
begin
writeln('ââåäèòå x:');
readln(x);
writeln('ââåäèòå y:');
readln(y);
c:= x^3/2-2*y+1;
writeln('c=',c);
end;
end.



0



Puporev

Почетный модератор

64291 / 47589 / 32740

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

Сообщений: 115,181

04.12.2012, 18:12

2

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

c:= x^3/2-2*y+1

Кто учил Вас так писать степени???

Pascal
1
c:=sqrt(x*x*x)-2*y+1



1



Узнай цену своей работы

Формулировка задачи:

в чем ошибка? помогите…

Код к задаче: «Ошибка: переменная не является указателем»

textual

Листинг программы

c:=sqrt(x*x*x)-2*y+1

Полезно ли:

15   голосов , оценка 3.867 из 5

Похожие ответы

  1. Ошибка при вводе значений массива
  2. Как обращаться к значению записи по указателю?
  3. Ошибка в коде, Incompatible types
  4. Напечатать на экране True, если введенное натуральное число является совершенным
  5. Найти и вывести количество тех из чисел, которые являются положительными
  6. Определить по координатам точек, являются ли они вершинами параллелограмма
  7. Выдает ошибку
  8. Ошибка в готовой программе
  9. Ошибка в построении
  10. Дан файл f компоненты которого являются символами получить файл g образованный из файла f с исключением повто
  11. В массиве слов найти пару слов,из которых одно является обращением другого

Сообщение об ошибках Сообщения об ошибках периода компиляции

1. Out of memory (Выход
за границы памяти). Компилятору не
хватает памяти. Для устранения ошибки
рекомендуется удалить из памяти ранее
загруженные, но не используемые в
данный момент программы, или указать,

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

2. Identifier expected
(Не указан идентификатор). Возможно,
в качестве идентификатора использовано
зарезервированное слово.

3. Unknown identifier.
Идентификатор не объявлен.

4. Duplicate identifier.
Идентификатор объявлен дважды.

5. Syntax error. В
исходном тексте найден недопустимый
символ. Возможно, не заключена в апострофы
строковая константа.

6. Error in real
constant (Ошибка в записи вещественной
константы.

7. Error in integer
constant (Ошибка в записи целой константы).

8. String constant
exceeds line (Длина строковой константы
превышает максимально допустимую длину
строки). Вероятно, отсутствует апостроф
в конце строковой константы.

9. Too many nested files
(Слишком много вложенных файлов).
Компилятор допускает не более 15
уровней вложенности включаемых файлов.

10.
Unexpected end of file. Возможно,
не совпадает количество операторов
begin и end или не закрыт комментарий.

11.
Line too long. Длина
строки превысила 126 символов.

12. Type identifier
expected (Здесь нужен идентификатор типа).
В объявлении не указан тип идентификатора.

13.
Too many open files (Слишком
много
открытых
файлов).

14.
Invalide file name. Указано
неверное имя файла или путь.

15.
File not found (Файл
не
найден).

16.
Disk fill (Диск заполнен). Следует удалить
некоторые файлы или воспользоваться
новым диском.

17. Invalid compiler
directive (Неправильно записана директива
компилятора). Возможно, в директиве
компилятора записана неверная буква.

18.
Too many files (Слишком
много
файлов).

19.
Undefined type in pointer definition. Объявлен
типизированный указатель, связанный
с ранее не объявленным типом данных.

20. Variable identifier
expected ( Отсутствует идентификатор
переменной).

21. Error in type
(Ошибка в объявлении типа). С данного
символа не может начинаться объявление
типа.

22. Structure too large
(Слишком большая структура). Превышен
допустимый размер (65520 байт) памяти для
данных структурированного типа.

23. Set base type of
range (Число значений базового типа для
множества превышает допустимое 256
значений).

24.
File components may not be files or obiects (Компонентами
файла
не
могут
быть
файлы
или
объекты).

25.
Invalid string length (Неверная длина строки).
Превышена максимально допустимая длина
строки (255).

26. Type mismatch.
Использованы несовместимые типы
операндов в выражении или в операторе,
либо несовместимые типы формального
и фактического параметров в обращении
к процедуре или функции.

27. Invalid subrange
base type (Недопустимый базовый тип для
типа-диапазона). Допустимы все порядковые
типы.

28.
Lower bound greater than upper bound (Нижняя
граница
больше
верхней).

29.
Ordinal type expected (Ожидается порядковый тип).
Не допускаются веще-ственные, строковые,
структурные, процедурные типы и
указатели.

30.
Integer constant expected (Ожидается
целая
константа).

31.
Сonstant
expected (Нужна
константа).

32.
Integer or real constant expected (Нужна
целая
или
вещественная
константа).

33.
Type identifier expected (Нужен
идентификатор
типа).

34.
Invalid function result type (Недопустимый
тип
результата
функции).
Допустимы
все простые, строковые типы и указатели.

35.
Label identifier expected (Нужен
идентификатор
метки).

36.
BEGIN expected (Нужен
BEGIN).

37.
END expected (Нужен
END).

38.
Integer expression expected (Нужно
выражение
типа
INTEGER).

39.
Ordinal expression expected
(Нужно
выражение
порядкового
типа).

40.
Boolean expression expected (Нужно
выражение
типа
BOOLEAN).

41.
Operand types do not match operator. Данная
операция не может быть применена к
указанным операндам, например, `A` div
`2`.

42.
Error in expression (Ошибка
в
выражении).
Возможно
пропущена операция между операндами.

43. Illegal assignment.
Нельзя присваивать значения файлам
и нетипизированным переменным.
Идентификатору функции можно присвоить
значение только внутри раздела операторов
данной функции.

44. Field identifier
expected. Требуется ссылка на какое-либо
поле записи, а не использовать запись
целиком.

45. Object file too
large (Объектный файл слишком большой).
OBJ-файл превышает максимально допустимый
размер 65520 байт.

46. Undefined external
(Неопределенная внешняя процедура).

47. Invalid object file
record (Неправильная запись объектного
файла). Вероятно, что объектный файл
искажен.

48.
Code segment too large. Превышен
максимальный размер кода программы
(65520 байт). Разбейте программу на два
или более модулей.

49.
Data segment too large. Превышен
допустимый размер сегмента данных
программы (65520 байт). Используйте
указатели и динамическую память.

50.
DO expected (Нужен
оператор
DO).

51.
Invalid PUBLIC definition (Неверное
PUBLIC-определение).

52.
Invalid EXTRN definition. Вероятно,
фрагмент программы на языке Ассемблера
не объявлен в программе или модуле.

53.
Too many EXTRN definition (Слишком
много
EXTЕRN-определений).
Максимально
допустимое их число в OBJ-файле равно
256.

54. OF expected
(Ожидается зарезервированное слово
OF).

55.
INTERFACE expected (Ожидается
ключевое
слово
INTERFACE).

56.
Invalid relocatable reference (Неправильно определена
перемещаемая ссылка). Вероятно, во
фрагменте программы на языке Ассемблера
неправильно задано смещение адреса.

57.
THEN expected (Требуется
THEN).

58.
TO or DOWNTO expected (Требуется
TO или
DOWNTO).

59.
Undefined forward (Не завершено опережающее
описание). Возможно про-цедура или
функция была описана с помощью
опережающего описания либо в интерфейсной
секции модуля, но ее определение не
найдено.

60. Too many procedure
(Слишком много подпрограмм, более 512).
Поместите некоторые процедуры или
функции в модули.

61. Invalid typecast
(Неверное преобразование типа).
Произведена попытка размещения в памяти
значения другого типа с большим размером
занимаемой памяти либо преобразования
типа выражения, когда разрешена только
ссылка на переменную, процедуру или
функцию.

62. Division by zero
(Деление на ноль).

63.
Invalid file type (Неправильно задан файловый
тип). Нельзя использовать процедуру
READLN для типизированного файла или
процедуры SEEK —
для текстового файла.

64. Cannot Read or Write
variables of this type (Нельзя считать или записать
переменные данного типа). Предпринята
попытка чтения/записи данных,
необрабатываемых процедурами Read/Readln
и Write/Writeln.

65. Pointer variable
expected (Используйте переменную-указатель).

66. String variable
expected (Необходима строковая переменная).

67. String expression
expected (Нужно выражение строкового типа).

68. Circular unit
reference (Перекрестная ссылка модулей).
Два модуля не должны ссылаться друг на
друга.

69. Unit name mismatch
(Несоответствие имен программных
модулей).

Модуль, имя которого
задано в директиве Uses, не найден.

70. Unit version mismatch
(Несоответствие версий модулей).
Воспользуйтесь опцией COMPILE/MAKE или
COMPILE/BUILD в интегрированной среде для
автоматической перекомпиляции
программных модулей.

71. Internal stack
overflow (Переполнение программного
стека).

72.
Unit file format error (Ошибка
формата
файла
модуля).
Файл .TPU
не соответствует стандарту ТП.

73. IMPLEMENTATION
expected (Отсутствует исполняемая часть
модуля). Ожидается зарезервированное
слово IMPLEMENTATION.

74. Constant and case
types do not match (Типы констант и тип выражения
в операторе вариант CASE не соответствуют
друг другу).

75.
Record variable expexted (Нужна переменная типа
«запись»).

76.
Constant out of range. Значение
переменной в фактических параметрах
подпрограммы или индекс массива вышли
за допустимые границы.

77. File variable
expected (Нужна файловая переменная).

78.
Pointer expression expected (Нужно выражение типа
«указатель»).

79.
Integer or real expression expected (Нужно
выражение
типа
integer или
real).

80.
Label not within current block (Метка
находится
вне
текущего
блока).

81.
Label already defined (Метка
уже
объявлена
ранее).

82.
Undefined label in proceding statement part. Данная
метка описана, и на нее осуществлялась
ссылка, но она не указана в тексте
программы.

83. Invalid @ argument
(Неправильный аргумент операции @).
Правильными аргументами являются
идентификаторы переменных, процедур
и функций.

84. Unit expected (Нужно
кодовое слово UNIT).

85. «;»
expected (Нужно указать «;»).

86. «:»
expected (Нужно указать «:»).

87. «,»
expected (Нужно указать «,»).

88. «(»
expected (Нужно указать «(«).

89. «)»
expected (Нужно указать «)»).

90. «=»
expected (Нужно указать «=»).

91. «:=»
expected (Нужно указать «:=»).

92. «[» or «(.»
expected (Нужно указать «[» или «(.»).

93. «]» or «).»
expected (Нужно указать «]» или «).»).

94. «.»
expected (Нужно указать «.»).

95. «..»
expected (Нужно указать «..»).

96. Too many variables
(Слишком много переменных). Нарушен
допустимый размер памяти (64кбайт) в
программном модуле или подпрограмме.

97.
Invalid FOR control variable. Параметр
цикла в операторе FOR должен быть
переменной порядкового типа.

98.
Integer variable expected (Нужна
переменная
целого
типа).

99.
File of procedure types are not allowed here. Типизированная
константа не может иметь файловый или
процедурный тип.

100. String length
mismatch (Неправильная длина строки).

101. Invalid ordering of
fields (Неверный порядок следования
полей). Поля в константе типа «запись»
должны записываться в порядке их
описания.

102.
String constant expected (Нужна
константа
строкового
типа).

103.
Integer or real variable expected (Нужна
переменная
типа
INTEGER или
REAL).

104.
Ordinal variable expected (Нужна переменная
порядкового типа).

105. INLINE error (Ошибка
в директиве INLINE). Оператор «<» не
допускается в сочетании с перемещаемыми
ссылками на переменные.

106. Character expression
expected (Нужно выражение символьного
типа).

107.Too many relocation
items (Слишком много перемещаемых
элементов).

108. Overflow in
arithmetic operation (Переполнение при выполнении
арифметической операции).

109.
No enclosing For, While or Repeat Statement (Использование
операторов
Break и
Continue вне
пределов
цикла).

110.
Debug information table overflow (Переполнение
отладочной информационной таблицы).

112.
CASE constant out of range. Константа
CASE не вписывается в допустимые границы
от — 32768 до 32767.

113.
Error in statement (Ошибка
в
операторе).
Данный
символ не может быть первым символом
в операторе.

114. Cannot call an
interrupt procedure (Невозможно вызвать процедуру
прерывания).

116. Must be in 8087
mode tp compile this (Для компиляции необходим
режим 8087 сопроцессора). Компилируйте
только в режиме {$N +}.

117. Targert address not
found (Указанный адрес не найден).

118.
Include
files
are
not
allowed
here
(Здесь не допускаются включения файлов).
Раздел операторов должен целиком
размещаться в одном файле.

119.
No inherited methods are accesible here (Неправильное
использование
ключевого
слова
Inherited).

120.
NIL expected (Нужно зарезервированное слово
NIL).

121. Invalid qualifier
(Неверный квалификатор). Возможно
индексирована переменная, не являющаяся
массивом, либо указано поле в переменной,
которая не является записью, либо в
качестве указателя использована
переменная, которая не является
указателем.

122.
Invalid variable reference (Неправильная
ссылка).
Возможно,
вызвана функция —
указатель, но нет ссылки на результат
с помощью знака ^.

123. Too many symbols
(Слишком много символов). Длина текста
программы (модуля) превышает 64 кбайт
символов. Отключите при компиляции
директиву {$D+} и разбейте программу на
несколько модулей.

124.
Statment part too large. Превышен
максимально допустимый размер (24 кбайт)
раздела операторов. Выделите часть
операторов в одну или несколько процедур
и сделайте программу более структурированной.

126.
Files must be var parameters. Произведена
попытка передать подпрограмме
параметра-значения файлового типа, а
нужен параметр-переменная.

127.
Too many conditional symbols. Недостаточно
памяти для определения слов, управляющих
командами условной компиляции.

128.
Misplaced conditional directive (Пропущена
условная
директива).

129.
ENDIF directive missing (Пропущена
директива
ENDIF).

130.
Error in initial conditional defines. Идентификаторы
в условных определениях должны
разделяться пробелами, запятыми или
точками с запятой.

131.
Header does not match previous definition. Заголовок
процедуры или функции, указанной в
интерфейсной секции, не соответствует
заголовку в исполняемой части. Возможно
также, что аналогичный заголовок,
указанный с помощью опережающего
описания FORWARD, не соответствует заголовку
найденной далее одноименной процедуры
или функции.

132.
Critical disk error (Критическая ошибка диска).
Возможно дисковод находится в соответствии
«не
готов».

133.
Cannot evaluate this expression (Нельзя
вычислить
выражение).

134.
Expression incorrectly terminated (Завершите
правильно
выражение).

135.
Invalid format specifier (Неверный спецификатор
формата).

136. Invalid indirect
reference (Недопустимая косвенная ссылка).

137. Structured variable
are not allowed here (Здесь нельзя использовать
переменную структурного типа). Сделана
попытка выполнить над переменной
структурного типа неподдерживаемую
операцию.

138.
Cannot evaluate without System unit (Нельзя
вычислить
выражение
без
модуля
SYSTEM).

139.
Cannot access this symbol. К
отдельным символам (переменным) нельзя
получить доступ, пока не запущена
программа.

140. Invalid floating
point operation (Недопустимая операция с
плавающей запятой). Произошло переполнение
или деление на ноль.

141.
Cannot compile overlays to memory. Программа
с оверлейными модулями должна
компилироваться на диск.

142. Procedure or function
variable expected (Должна использоваться
переменная процедурного типа).

143.
Invalid procedure or function reference (Недопустимая
ссылка
на
процедуру
или
функцию).
Возможно
в выражении вызывается процедура.

144. Cannot overlay this
unit (Этот модуль нельзя сделать
оверлейным). Модуль не скомпилирован
с директивой {$O+}.

145. TOO many nested
scopes (Использование недопустимо большого
числа вложенных элементов языка).

146. File access denied
(Попытка использовать файл, предназначенный
только для считывания, как выходной).

147.
Object type expected (Здесь
должен
быть
тип
OBJECT).

148.
Local object types are not allowed (Нельзя
объявлять
локальные
объекты).
Нельзя
объявить объект в процедуре (функции).

149.
VIRTUAL expected (Пропущено
слово
VIRTUAL).

150.
Method identifier expected (Пропущен идентификатор
инкапсулированного правила).

151. Virtual constructor
are not allowed (Виртуальные конструкторы не
допустимы).

152. Constructor
identifier expected (Нужен идентификатор
конструктора).

153.
Destructor identifier expected (Нужен
идентификатор
деструктора).

154.
Fail only allowed within constructors (Обращение к
стандартной процедуре FAIL может
содержаться только внутри конструктора).

155. Invalid combination
of opcode and operands (Не допустимая комбинация
кода команды и операндов).

156.
Memory reference expected (Отсутствует
адрес).
Вероятно,
не выделен квадратными скобками
индексный регистр.

157.
Cannot add or subtract relocatable symbols. В
ассемблерных выражениях обоими
операндами в операциях сложения и
вычитания могут быть только ссылки на
константу.

158. Invalid register
combination (Недопустимая комбинация
регистров).

159.
286/287 instructions are not enabled. Используйте
директиву {$G+} для ПК, оснащенных
процессором Intel 80286/80287&.

160. Invalid symbol
reference (Недопустимая ссылка на символ).
К указанному символу нельзя обратиться
в ассемблерной программе.

161. Code generation
error (Ошибка генерации кода). Возникает
при компиляции ассемблерных фрагментов
со ссылкой на недоступную метку.

162. ASM expected
(Отсутствует зарезервированное слово
ASM).

165. Duplicite or invalide
export index (Двойной или неверный экспортируемый
индекс).

166. Prosedure or function
identifier expected (Ожидается идентификатор
процедуры или функции).

167.
Cannot export this symbol. Этот
символ не может передаваться в другие
модули.

168. Duplicate export name
(Двойное экспортируемое имя).

169. Executable file
header too large (Заголовок исполняемого
файла содержит слишком много символов).

170. Too many segments
(Слишком много сегментов).

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

Сообщение

Описание

Error: Type mismatch

Это может произойти во многих случаях:

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

Вы вызываете функцию или процедуру с параметрами, которые несовместимы с параметрами в объявлении функции или процедуры

Error: Incompatible types: got «Сообщ1» expected «Сообщ2»

Невозможно преобразование между двумя типами. Ещё одна причина – типы объявлены в разных объявлениях:

Var A1 : Array[1..10] Of Integer;
  A2 : Array[1..10] Of Integer;
Begin
A1:=A2; {Этот оператор также даёт такую ошибку, потому
          что выполняется строгая проверка типов Pascal}
End.

Error: Type mismatch between «Сообщ1» and «Сообщ2»

Типы не являются эквивалентными.

Error: Type identifier expected

Идентификатор не является типом, или вы забыли указать идентификатор type.

Error: Variable identifier expected

Это случается, если вы помещаете константу в процедуру (такую как Inc или Dec), в то время как процедура требует переменной. Для таких процедур в качестве параметров можно помещать только переменные.

Error: Integer expression expected, but got «Сообщение»

Компилятор ожидает выражения типа integer, но получает другой тип.

Error: Boolean expression expected, but got «Сообщение»

Выражение должно быть типа boolean. Оно должно возвращать True или False.

Error: Ordinal expression expected

Выражение должно быть порядкового типа, то есть максимум типа Longint. Эта ошибка случается, например, если вы указали второй параметр процедуры Inc или Dec, который не соответствует порядковому типу.

Error: pointer type expected, but got «Сообщение»

Переменная или выражения не являются указателем. Это случается, если вы помещаете переменную, которая не является указателем, в New или Dispose.

Error: class type expected, but got «Сообщение»

Переменная или выражение не являются типом class. Это обычно случается, если

1.Родительский класс в объявлении класса не является классом

2.Обработчик исключения (On) cсодержит идентификатор типа, который не является классом.

Error: Can’t evaluate constant expression

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

Error: Set elements are not compatible

Вы пытаетесь выполнить операцию с двумя множествами, в то время как типы элементов этих множеств не являются одинаковыми. Базовые типы множеств должны быть одинаковыми при объединении.

Error: Operation not implemented for sets

Некоторые бинарные операторы не определены для множеств. Это операторы: div, mod, **, >= и <=. Последние два могут быть определены для множеств в будущих версиях.

Warning: Automatic type conversion from floating type to COMP which is an integer type

Обнаружено явное преобразование типов из real в comp. s encountered. Поскольку comp – это 64-битное целое число, то это может вызвать ошибку.

Hint: use DIV instead to get an integer result

Если подсказки включены, то целочисленное деление с оператором ‘/‘ приведёт к этому сообщению, потому что результатом будет вещественный тип.

Error: string types doesn’t match, because of $V+ mode

Если выполняется компиляция в режиме {$V+}, то строка, передаваемая вами в качестве параметра, должна быть точно такого же типа, как параметр процедуры.

Error: succ or pred on enums with assignments not possible

Если вы объявили перечисляемый тип в стиле С, например, так:

Tenum = (a,b,e:=5);

То вы не сможете использовать функции Succ или Pred с этим перечислением.

Error: Can’t read or write variables of this type

Вы пытаетесь прочитать или записать переменную из файла или в файл текстового типа, который не поддерживает тип переменной. Только целочисленные типы, вещественные, pchars и strings можно читать из файла или записывать в текстовый файл. Логические переменные можно только записывать в текстовый файл.

Error: Can’t use readln or writeln on typed file

readln и writeln можно использовать только с текстовыми файлами.

Error: Can’t use read or write on untyped file.

read и write допускаются только для текстовых или типизированных файлов.

Error: Type conflict between set elements

Это означает, что не менее одного элемента множества имеют неправильный тип.

Warning: lo/hi(dword/qword) returns the upper/lower word/dword

Free Pascal поддерживает перегруженную версию lo/hi для longint/dword/int64/qword, которые возвращают наименьшее/наибольшее (результат типа слово/двойное слово) значение аргумента. Turbo Pascal позволяет использовать 16-битные lo/hi, которые возвращают биты 0..7 для lo и биты 8..15 для hi. Если вы хотите получить поведение, аналогичное Turbo Pascal, вы должны использовать приведение типов к word или integer.

Error: Integer or real expression expected

Первый аргумент для str должен быть типа real или integer.

Error: Wrong type «Сообщение» in array constructor

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

Error: Incompatible type for arg no. Сообщ1: Got «Сообщ2», expected «Сообщ3»

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

Error: Method (variable) and Procedure (variable) are not compatible

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

Error: Illegal constant passed to internal math function

Аргумент-константа, переданный в функцию ln или sqrt выходит за пределы диапазона для этой функции.

Error: Can’t take the address of constant expressions

Невозможно получить адрес выражения-константы, потому что оно не записывается в память. Вы можете попробовать сделать типизированную константу. Эта ошибка может также появиться, если вы пытаетесь поместить свойство в параметр var.

Error: Argument can’t be assigned to

Только выражение, которое может быть в левой части присваивания, может быть передано как вызов по ссылке аргумента. Примечание: Свойства могут использоваться в левой части присваивания, тем не менее, они не могут использоваться как аргументы.

Error: Can’t assign local procedure/function to procedure variable

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

Error: Can’t assign values to an address

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

Error: Can’t assign values to const variable

Не допускается присваивать значение переменной, которая объявлена как константа. Обычно параметр объявляется как константа. Чтобы иметь возможность изменять значение, передавайте параметр по значению или параметр по ссылке (используя var).

Error: Array type required

Если вы хотите получить доступ к переменной, используя индекс ‘[<x>]‘, то тип должен быть массивом. В режиме FPC указатель также допускается.

Error: interface type expected, but got  «»Сообщение»

Компилятор ожидал для нумератора имя типа интерфейса, но получил нечто другое. Следующий код приведёт к этой ошибке:

Type
TMyStream = Class(TStream,Integer)

Hint: Mixing signed expressions and longwords gives a 64bit result

Если вы делите (или вычисляете модуль) выражения со знаком с типом longword (или наоборот), или если вы имеете переполнение и/или включена проверка диапазона и используется арифметическое выражение (+, -, *, div, mod), в котором оба числа со знаком и появляется longwords, то всё это вычисляется как 64-битная арифметическая операция, которая медленнее, чем обычная 32-битная. Вы можете избежать этого при помощи преобразования типа одного из операндов в подходящий для результата и другого операнда.

Warning: Mixing signed expressions and cardinals here may cause a range check error

Если вы используете бинарный оператор (and, or, xor) и один из операндов — это longword, в то время как другой – это выражение со знаком, то, если проверка диапазона включена, вы можете получить ошибку проверки диапазона, потому что в этом случае оба операнда преобразуются в longword перед выполнением операции. Вы можете избежать этого при помощи преобразования типа одного из операндов в подходящий для результата и другого операнда.

Error: Typecast has different size (Сообщ1 -> Сообщ2) in assignment

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

Error: enums with assignments can’t be used as array index

Если вы объявили перечисляемый тип, который имеет С-подобные присваивания, как показано ниже:

Tenum = (a,b,e:=5);

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

Error: Class or Object types «Сообщ1» and «Сообщ2» are not related

Выборка из одного класса в другой, в то время как класс/объект не являются связанными. Вероятно, это ошибка ввода.

Warning: Class types «arg1» and «arg2» are not related

Выборка из одного класса в другой, в то время как класс/объект не являются связанными. Вероятно, это ошибка ввода.

Error: Class or interface type expected, but got «arg1»

Компилятор ожидал имя класса или интерфейса, но получил другой тип или идентификатор.

Error: Type «Сообщение» is not completely defined

Эта ошибка случается, если тип не завершён, например, тип pointer, который указывает на неопределённый тип.

Warning: String literal has more characters than short string length

Размер строки-константы, которая связана с shortstring, больше максимального размера для shortstring (255 символов).

Warning: Comparison is always false due to range of values

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

Warning: Comparison is always true due to range of values

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

Warning: Constructing a class «Сообщ1» with abstract method «Сообщ2»

Например, создаваемый класс содержит неисполняемые абстрактные методы. Имеется вероятность, что случится ошибка времени исполнения 211 в коде, если эта процедура будет когда-либо вызвана. Все абстрактные методы должны быть перегружаемыми.

Hint: The left operand of the IN operator should be byte sized

Левый операнд в операторе IN не является порядковым или перечислением, который помещается в 8 бит. Это может привести к ошибке проверки диапазона. На текущий момент оператор in поддерживает левый оператор только в пределах байта. В случае с перечислениями, размер элемента перечисления может изменяться опциями {$PACKENUM} или {$Zn}.

Warning: Type size mismatch, possible loss of data / range check error

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

Hint: Type size mismatch, possible loss of data / range check error

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

Error: The address of an abstract method can’t be taken

Не найдено тело абстрактного метода, поэтому адрес абстрактного метода не может быть назначен.

Error: Assignments to formal parameters and open arrays are not possible

Вы пытаетесь присвоить значение формальному параметру (нетипизированный var, const или out), или открытому массиву.

Error: Constant Expression expected

Компилятор ожидал выражение-константу, но получил выражение- переменную.

Error: Operation «Сообщ1» not supported for types «Сообщ2» and «Сообщ3»

Операция не допускается для указанных типов.

Error: Illegal type conversion: «Сообщ1» to «Сообщ2»

Когда выполняете преобразование типов, вы должны понимать, что размеры переменной и типа назначения одинаковы.

Hint: Conversion between ordinals and pointers is not portable

Если вы преобразуете тип pointer в longint (или наоборот), то код не будет компилироваться на машинах, использующих 64-разрядную адресацию.

Warning: Conversion between ordinals and pointers is not portable

Если вы преобразуете тип pointer в порядковый тип с другим размером (или наоборот), то могут возникнуть проблемы. Это предупреждение помогает в поиске 32-битного специального кода, где cardinal/longint используются для преобразования указателей в порядковые типы. Решением проблемы является использование вместо этого типов ptrint/ptruint.

Error: Can’t determine which overloaded function to call

Вы вызываете перегруженную функцию с параметром, который не связан с каким-либо объявленным списком параметров, например, когда вы имеете объявленную функцию с параметрами word и longint, а затем вызываете её с параметром типа integer.

Error: Illegal counter variable

Переменная для цикла for должна быть порядкового типа. Переменные циклов не могут быть вещественными числами или строками.

Warning: Converting constant real value to double for C variable argument, add explicit typecast to prevent this.

В C значения вещественных констант по умолчанию имеют тип double. Из этих соображений, когда вы передаёте вещественную константу в функцию С в качестве параметра, компилятор FPC по умолчанию преобразует её в тип double. Если вы хотите контролировать этот процесс, добавьте для константы явное преобразование в нужный тип.

Error: Class or COM interface type expected, but got «Сообщение»

Некоторые операторы, такие как AS, применяются только для классов или COM-интерфейсов.

Error: Constant packed arrays are not yet supported

Вы не можете объявить битовый (упакованный) массив как типизированную константу.

Error: Incompatible type for arg no. Сообщ1: Got «Сообщ2» expected «(Bit)Packed Array»

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

Error: Incompatible type for Сообщение no. Сообщ1: Got «Сообщ2» expected «»(not packed) Array»

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

Error: Elements of packed arrays cannot be of a type which need to be initialised

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

Error: Constant packed records and objects are not yet supported

Вы не можете объявить битовый (упакованный) массив как типизированную константу в данное время.

Warning: Arithmetic «Сообщение» on untyped pointer is unportable to {$T+}, suggest typecast

Сложение/вычитание из нетипизированных указателей может работать по разному в {$T+}. Используёте преобразование типов для типизированных указателей.

Error: Can’t take address of a subroutine marked as local

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

Error: Can’t export subroutine marked as local from a unit

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

Error: Type is not automatable: «Сообщение»

Только byte, integer, longint, smallint, currency, single, double, ansistring, widestring, tdatetime, variant, olevariant, wordbool и все интерфейсы являются automatable.

Hint: Converting the operands to «Сообщение» before doing the add could prevent overflow errors.

Сложение двух типов может вызвать ошибку переполнения. Обычно вы конвертируете результат в больший тип. Вы должны предотвращать такие ошибки, преобразуя операнды в этот тип перед сложением.

Hint: Converting the operands to «Сообщение» before doing the subtract could prevent overflow errors.

Вычитание между двумя типами может вызвать ошибку переполнения. Обычно вы конвертируете результат в больший тип. Вы должны предотвращать такие ошибки, преобразуя операнды в этот тип перед вычитанием.

Hint: Converting the operands to «Сообщение» before doing the multiply could prevent overflow errors.

Умножение между двумя типами может вызвать ошибку переполнения. Обычно вы конвертируете результат в больший тип. Вы должны предотвращать такие ошибки, преобразуя операнды в этот тип перед умножением.

Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned

Виртуальное адресное пространство на виртуальных машинах располагается от $00000000 до $ffffffff. Многие операционные системы позволяют выделять память с адресами выше $80000000. Например, как WINDOWS, так и LINUX, допускают использование указателей в диапазоне от $0000000 до $bfffffff. Если вы преобразуете типы со знаком, это может вызвать ошибки переполнения и проверки диапазона, но также $80000000 < $7fffffff. Это может вызвать случайную ошибку в коде, подобно этому: «if p>q».

Error: Interface type Сообщение has no valid GUID

Если применяется оператор as для интерфейса или класса, то интерфейс (то есть правый операнд оператора as) должен иметь правильный GUID.

Error: Invalid selector name

Селектор Objective-C не может быть пустым, он должен быть правильным идентификатором или одинарным двоеточием, а если он содержит менее одного двоеточия, он также должен быть завершён.

Error: Expected Objective-C method, but got Сообщение

Селектор может быть создан только для методов Objective-C, не для любых других процедур/функций/методов.

Error: Expected Objective-C method or constant method name

Селектор может быть создан только для методов Objective-C, при задании имени используются строковые константы или идентификатор метода Objective-C, который является видимым из текущей области видимости.

Error: No type info available for this type

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

Error: Ordinal or string expression expected

The expression must be an ordinal or string type.

Error: String expression expected

The expression must be a string type.

Warning: Converting 0 to NIL

Use NIL rather than 0 when initialising a pointer.

Error: Objective-C protocol type expected, but got ”arg1”

The compiler expected a protocol type name, but found something else.

Error: The type ”arg1” is not supported for interaction with the Objective-C runtime

Objective-C makes extensive use of run time type information (RTTI). This format is defined by the maintainers of the run time and can therefore not be adapted to all possible Object Pascal types. In particular, types that depend on reference counting by the compiler (such as ansistrings and certain kinds of interfaces) cannot be used as fields of Objective-C classes, cannot be directly passed to Objective-C methods, and cannot be encoded using objc_encode.

Error: Class or objcclass type expected, but got ”arg1”

It is only possible to create class reference types of class and objcclass

Error: Objcclass type expected

The compiler expected an objcclass type

Warning: Coerced univ parameter type in procedural variable may cause crash or memory corruption: arg1 to arg2

univ parameters are implicitly compatible with all types of the same size, also in procedural variable definitions. That means that the following code is legal, because single and longint have the same size:

{$mode macpas}

Type

  TIntProc = procedure (l: univ longint);

  procedure test(s: single);

    begin

      writeln(s);

    end;

  var

    p: TIntProc;

  begin

    p:=test;

    p(4);

  end.

This code may however crash on platforms that pass integers in registers and floating point values on the stack, because then the stack will be unbalanced. Note that this warning will not flagg all potentially dangerous situations. when test returns.

Error: Type parameters of specializations of generics cannot reference the currently specialized type

Recursive specializations of generics like Type MyType = specialize MyGeneric<MyType>; are not possible.

Error: Type parameters are not allowed on non-generic class/record/object procedure or function

Type parameters are only allowed for methods of generic classes, records or objects

Error: Generic declaration of ”arg1” differs from previous declaration

Generic declaration does not match the previous declaration

Error: Helper type expected

The compiler expected a class helper type.

Error: Record type expected

The compiler expected a record type.

Error: Derived class helper must extend a subclass of ”arg1” or the class itself

If a class helper inherits from another class helper the extended class must extend either the same class as the parent class helper or a subclass of it

Error: Derived record helper must extend ”arg1”

If a record helper inherits from another record helper it must extend the same record that the parent record helper extended.

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

1. Ошибки в управлении памятью

Утечка памяти

Утечка памяти – одна из самых распространенных ошибок в программировании на C++. Она возникает, когда программист забывает освободить динамически выделенную память с помощью оператора delete после окончания ее использования. Это может привести к постепенному увеличению потребляемой программой памяти до тех пор, пока она не будет исчерпана.

Для исправления этой ошибки необходимо следить за каждым выделением памяти и удалять ее с помощью оператора delete при устранении необходимости ее использования.

Обращение к освобожденной памяти

Другой распространенной ошибкой в управлении памятью является обращение к освобожденной памяти. Это происходит, когда программа продолжает использовать указатель на участок памяти, который уже был освобожден с помощью оператора delete или delete[]. Такое обращение может привести к неопределенному поведению программы, такому как сбои или ошибки времени выполнения.

Для исправления этой ошибки необходимо тщательно отслеживать использование указателей на освобожденную память и удалять ссылки на эту память.

2. Ошибки в работе с указателями

Данная переменная не является указателем

Очень частой ошибкой при работе с указателями является попытка разыменовать переменную, которая не является указателем. Это может произойти, если переменная была объявлена неверно или была изменена неправильно.

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

Указатель указывает на неправильный тип данных

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

Для исправления этой ошибки необходимо убедиться, что тип данных, на который указывает указатель, совпадает с типом данных переменной или объекта, к которым осуществляется доступ.

3. Ошибки в использовании стандартной библиотеки

Некорректное использование контейнеров STL

Стандартная библиотека C++ (STL) предоставляет различные контейнеры данных, такие как векторы, списки и множества. Одной из распространенных ошибок при работе с контейнерами STL является их некорректное использование, такое как несоответствие типов данных при вставке в контейнер или обращение к несуществующему элементу.

Для исправления этой ошибки необходимо тщательно проверять типы данных и состояния контейнеров STL при их использовании.

Некорректное использование итераторов

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

Для исправления этой ошибки необходимо тщательно отслеживать итераторы и проверять их состояние перед их использованием и изменением.

Заключение

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

Понравилась статья? Поделить с друзьями:
  • Ошибка печати e06 excel
  • Ошибка перегрева самсунг а50
  • Ошибка повторите операцию позднее 102
  • Ошибка печати e04 excel
  • Ошибка перекодирования невозможно сопоставить размер кадра