Operand types do not match operator ошибка

I have to learn Assembly for my university and i need to do this:

(a+b+c+1) *(a+b+c+1) /((a-b+d)*(a-b+d)).

When i try to create the exe file using the «tasm» command i get this messages:

**Error** lab1.ASM(14) Operand types do not match
**Error** lab1.ASM(15) Operand types do not match
**Warning* lab1.ASM(30) Open segment:Data

Here is my code:

assume cs:code,ds:data
data segment 
a db 1
b db 2
c db 3 
d db 4 
code segment 
start:
mov ax,data
mov ds,ax
mov al,a
mov ah,0
add ax,b ;ax=a+b
add ax,c ;ax=a+b+c
add ax,1 ;ax=a+b+c+1
mov bx,ax ;bx=ax
mul bx ;dx:ax=(a+b+c+1) *(a+b+c+1)
mov al,a
mov ah,0
sub al,b ; al=a-b
add al,d ; al=a-b+d
mov bl,al ; bl=al
mul bl ; ax=(a-b+d)*(a-b+d)
mov bx,ax
div bx ; dx:ax :bx =(a+b+c+1) *(a+b+c+1) /((a-b+d)*(a-b+d))
mov ax,4c00h
int 21h
code ends
end start

balin

1 / 1 / 0

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

Сообщений: 83

1

03.04.2016, 23:30. Показов 5156. Ответов 6

Метки tasm, ошибка (Все метки)


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

Появилась вот такая вот ошибка — Operand types do not match. Не знаю как исправить.
Само задание
Вычислить произведение numb1 и numb2. В произведении по-менять местами значения старших тетрад (полубайтов) из младшего байта и старшего байта. Затем сформировать код в двухбайтном регистре следующим образом: биты 15-13 сделать единичными, биты 12-6 —взять из соответствующих разрядов numb2, остальные биты нулевые.

Assembler
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
.386
dseg segment use16
    numb1 db 7
    numb2 dw 25
dseg ends
 
eseg segment use16
        ea dw   ?
        eb dw   ?       
eseg ends
        
cseg segment use16
assume ds:dseg, cs:cseg, es:eseg
 
m1:
    mov cx,dseg
    mov ds,cx
    mov cx,eseg
    mov es,cx
    
    ;Выполняю умножение
    mov bx,numb1
    mov ax,numb2
    mul bx
    
    ;Выполняю перемещение из BH в BL и наоборот
    xor dx, dx ;обнулил
    mov dh,bl
    xor bl, bl ;обнулил
    mov bl,bh
    xor bh, bh ;обнулил
    mov bh,dh
    ;занесем в новый регистр
    mov es:eb, bx
    
    ; биты 15-13 делаем в 1, 12-6 из numb2, остальные в 0    
    xor cx, cx
    mov cx, ds: numb2
    and cl,11000000b
    or ch ,11100000b
    mov es:ea, cx
    ;Завершаем программу 
    mov ah, 4ch
    int 21h
    cseg ends
    end m1



0



183 / 121 / 26

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

Сообщений: 509

03.04.2016, 23:35

2

balin,

numb1 db 7 ? или dw? код не смотрел

и еще стек не определен



0



1 / 1 / 0

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

Сообщений: 83

03.04.2016, 23:55

 [ТС]

3

@tahir_

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

mov ax,numb2

Вот тут пишет

Добавлено через 1 минуту
#tahir_

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

mov bx,numb1

Вот тут

Добавлено через 12 минут
tahir_ mov bx,numb1
все время на него ссылается



0



Mikl___

Ушел с форума

Автор FAQ

15894 / 7468 / 1013

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

Сообщений: 13,450

04.04.2016, 03:51

4

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

Решение

balin,
замени mov bx,numb1 на

Assembler
1
2
mov bh,0 
mov bl,numb1



1



1 / 1 / 0

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

Сообщений: 83

04.04.2016, 12:30

 [ТС]

5

Mikl___, СПАСИБО большое!!!



0



proc3nt

Прощай, Мир!

1672 / 829 / 253

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

Сообщений: 3,057

04.04.2016, 18:29

6

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

Решение

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

Выполняю перемещение из BH в BL и наоборот

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

В произведении по-менять местами

во первых, не те регистры меняешь. произведение будет находится в паре регистров dx:ax

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

по-менять местами значения старших тетрад (полубайтов)

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

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    ;выполняем умножение
    mov bh,0
    mov bl,numb1
    mov ax,numb2
    mul bx
    
    mov bx,ax
    
    ;делаем первый обмен
    and bh,00001111b
    and bl,11110000b
    xor bh,bl
    
    ;делаем второй обмен
    and ah,11110000b
    and al,00001111b
    xor al,ah
    
    ;соединяем воедино два байта в регистре ax 
    mov ah,bh
    
    ;занесем в новый регистр
    mov es:eb,ax



1



1 / 1 / 0

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

Сообщений: 83

04.04.2016, 19:36

 [ТС]

7

proc3nt, Ого, спасибо огромное, выручили



0



мдя…мы с тобой даже источники одни и те же используем при подготовке )))
забавно получается…
вот код программы.ты писал что не удается прочитать из ворда. копируй.
program matrica4;
uses crt;
const n=100;
m=150;

var i,j,x,y,z,k:integer;
a: array[1..n, 1..m] of integer;
begin
clrscr;
writeln(‘vvedite kolichestvo strok, ono dolzhno bit` >0 i ne dolzhno previshat` ‘, n );
readln (x);
writeln(‘vvedite kolichestvo stolbcov, ono dolzhno bit` >0 i ne dolzhno previshat` ‘, m);
readln (y);
writeln (‘sgenerirovana matrica:’);
readln;
randomize;
for i:=1 to x do
begin
for j:=1 to y do
begin
a[i,j]:=random(100);
write (a[i,j]:2,+ ‘ ‘);
end;
writeln;
end;
readln;
writeln(‘zakonchen vivod isxodnoj matrici’);
readln;

for i:=1 to x do

for j:=1 to y-1 do

for k:=1 to y-1 do

if a[i,k]>a[i,k+1] then
begin
z:=a[i,k];
a[i,k]:=a[i,k+1];
a[i,k+1]:=z;
end;
writeln (‘novaya matrica: ‘);
readln;
for i:=1 to x do
begin
for j:=1 to y do
write (a[i,j]:2, ‘ ‘);
writeln;
end;
readln;
end.

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

Наиболее распространенные сообщения об ошибках

2
Identifier expected
,
не указан идентификатор.

3
Unknown
identifier,
неизвестное имя идентификатора,
идентификатор не был описан.

4
Duplicate identifier
,
двойной идентификатор, попытка дважды
описать один и тот же идентификатор.

5
Syntax
error,
синтаксическая ошибка, найден недопустимый
символ.

8
String
constant
exceeds
line,
пропущен апостроф в конце строковой
константы.

10
Unexpected
end
of
file,
отсутствует конец файла, т.е. не поставлена
точка после END
или вероятно в программе неодинаковое
количество операторов BEGIN и END.

11
Line too long
,
слишком длинная строка.

12
Type identifier expected
,
не указан тип идентификатора.

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

20
Variable identifier expected
,
не указан идентификатор переменной.

21
Error in type
,
ошибка в объявлении типа.

26
Type
mismatch,
несоответствие типов. Несовместимые
типы переменной и выражения в операторе
присваивания;

33
Labеl
identifier
expected,
необходим идентификатор метки.

36
BEGIN

expected,
необходим
BEGIN.

37
END expected
,
необходим
END.

38
Integer expression expected
,
необходимо
выражение
типа
Integer.

41
Operand types do not match operator
,
типы
операндов
не
соответствуют
операции.

42
Error in expression
,
ошибка
в
выражении.

50
DO expected
,
необходим
оператор
DO.

57
THEN
expected,
необходим THEN.

62
Division
by
zero,
предшествующая операция пытается
выполнить деление на ноль.

79
Integer or real expression expected
,
необходимо выражение вещественного
или целого типа.

85
“;”
expected,
отсутствует точка с запятой.

89
“)”
expected,
пропущена скобка.

97
Invalid FOR control variable
,
неверный параметр цикла оператора FOR.

98
Integer variable expected
,
переменная должна иметь целый тип.

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

207
Invalid floating point operation
,
недопустимая операция с плавающей
запятой (отрицательный аргумент функции
SQRT или аргумент функции LN равен нулю
или имеет отрицательное значение).

Контрольные вопросы по теме «Алгоритмизация и программирование»

  1. Этапы решения
    задач на ЭВМ.

  2. Понятие алгоритма,
    свойства алгоритмов.

  3. Способы задания
    алгоритмов.

  4. Линейная структура
    алгоритмов.

  5. Разветвляющая
    структура алгоритмов.

  6. Циклическая
    структура алгоритмов.

  7. Характеристика
    языков программирования.

  8. Трансляторы с
    языков программирования.

  9. Алгоритмический
    язык Turbo
    Pascal:
    особенности, назначение.

  10. Алфавит
    и словарь языка Turbo
    Pascal.

  11. Константы и
    переменные.

  12. Структура программы.
    Требования к написанию программ.

  13. Классификация
    типов данных.

  14. Стандартные типы
    данных.

  15. Пользовательские
    типы данных.

  16. Выражения, операции,
    операнды.

  17. Приоритеты
    выполнения операций.

  18. Понятие оператора.
    Простые операторы.

  19. Структурные
    операторы: составной оператор.

  20. Структурные
    операторы: условные операторы.

  21. Структурные
    операторы: операторы повтора.

  22. Понятие массива,
    характеристика массива.

  23. Описание массивов.

  24. Порядок
    разработки программы на Turbo
    Pascal.

Список использованной литературы

  1. Бабушкина,
    И. А.
    Практикум
    по Турбо Паскалю: учебное пособие по
    курсам «Информатика и вычислительная
    техника» / И. А. Бабушкина, Н. А. Бушмелева.
    – М. : АБФ, 1998. – 384с.

  2. Немнюгин,
    С. А.
    Turbo
    Pascal
    /
    С. А.
    Немнюгин. – СПб. : Питер, 2002. – 496с.

  3. Основы
    программирования

    / С. М. Окулов. – 3-е изд. – М. : БИНОМ.
    Лаборатория знаний, 2006. – 440с. : ил.

  4. Попов,
    В. Б.
    Турбо
    Паскаль для школьников
    /
    В. Б. Попов.
    – М., 2000.

  5. Рапаков,
    Г. Г.
    Turbo
    Pascal
    для студентов и школьников / Г. Г. Рапаков,
    С. Ю. Ржеуцкая. – СПб. : БХВ-Петербург,
    2004. – 352с.

  6. Фаронов,
    В. В.
    Турбо
    Паскаль 7.0. Практическое программирование
    /
    В. В. Фаронов.
    − Киев, 2000.

  7. Фаронов,
    В. В.
    Турбо
    Паскаль 7.0. Начальный курс
    /
    В. В. Фаронов.
    – Киев, 2000.

Учебное издание

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Регистрация   Войти‘;

Авторизация

Логин:

Пароль:

Запомнить меня на этом копьютере

Регистрация
Забыли свой пароль?

Справочник |Библиотека |Файлы и загрузки |Уроки |FAQ| Скачать Turbo Pascal Форум

  • Синтаксис языка
  • Типы данных
  • Стандартные модули
  • Процедуры и функции
  • Зарезервированные слова
  • Директивы компилятора
  • Сообщения об ошибках
    • Ошибки выполнения
    • Ошибки компиляции
  • Примеры программ
  • Описание среды разработки

Главная / Справочник / Сообщения об ошибках / Ошибки компиляции

Тип операндов не соответствует оператору.

Описание

Операнды этого типа не могут быть переданы в данный оператор. Например:’A’ div ‘2’.

© 2009–2023 Russian Pascal Developer Network.
Техническая площадка: ISBIZ Хостинг

ISBIZ.agency
продвижение сайта

41 Operand types do not match operator — Типы операндов не соответствуют операции

Данная операция не может быть применена к указанным операндам, например, ‘А’ div ‘2’

42 Error in expression — Ошибка в выражении

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

43 Illegal assignment — Неверное присваивание

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

44 Field identifier expected — Нужен идентификатор поля

Попытка использовать запись целиком в том месте, где требуется ссылка на какое-либо поле записи

45 Object file too large — Объектный файл слишком большой

Турбо Паскаль не может компоновать файлы .OBJ больше 64 Кбайт

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

Внешняя процедура или функция не имеет соответствующего определения PUBLIC в объектном файле. Убедитесь, что Вы указали все объектные файлы в директивах {$L <имя .OBJ-файлa>} и проверьте написание идентификаторов процедуры или функции в файле . ASM

47 Invalid object file record — Неправильная запись объектного файла

Файл .OBJ содержит неверную объектную запись. Убедитесь, что данный файл является действительно файлом .OBJ

48 Code segment too large — Сегмент кода слишком большой

Максимальный размер кода программы или программного модуля равняется 65520 байтам. Разбейте Вашу программу или модуль на два или более модулей

49 Data segment too large — Сегмент данных слишком велик

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

50 DO expected — Нужен оператор DO

51 Invalid PUBLIC definition — Неверное PUBLIC-определение

Возможные причины сообщения:

— данный идентификатор получил тип PUBLIC с помощью соответствующей директивы языка ассемблера, но не соответствует описанию EXTERNAL в программе или программном модуле Паскаля
— две или более директивы PUBLIC языка ассемблера определяют один и тот же идентификатор
— файлы .OBJ определяют символы PUBLIC, не находящиеся в сегменте CODE

52 Invalid EXTRN definition — Неправильное EXTRN-определение

Возможные причины сообщения:

— программа на ассемблере ссылается с помощью директивы EXTRN на идентификатор, который не описан в программе на Паскале и не был описан в интерфейсных секциях используемых программных модулей
— ассемблерная программа ссылается на идентификатор, обозначающий абсолютную переменную (т.е. определенную словом ABSOLUTE)
— ассемблерная программа ссылается на идентификатор процедуры или функции типа INLINE

53 Too many EXTRN definition — Слишком много EXTRN-определений

Турбо Паскаль не может обрабатывать файлы .OBJпри более чем 256 определениях EXTRN

54 OF expected — Требуется OF

55 INTERFACE expected — Требуется интерфейсная секция

56 Invalid relocatable reference — Неправильная перемещаемая ссылка

Возможные причины сообщения:

— файл .OBJ содержит данные и перемещаемые ссылки в сегментах, отличных от CODE. Например, Вы пытаетесь описать инициализированные переменные в сегменте DATA
— файл .OBJ содержит ссылки с размерами в байтах на перемещаемые символы. Такая ошибка происходит в случае, если Вы используете операторы HIGH и LOW с перемещаемыми символами или если Вы ссылаетесь в директивах DB на перемещаемые символы
— операнд ссылается на перемещаемый символ, который не был определен в сегменте CODE или в сегменте DATA
— операнд ссылается на процедуру EXTRN или функцию EXTRN со сдвигом, например, CALL SortProc+8

57 THEN expected — Требуется THEN

58 TO or DOWNTO expected — Требуется ТО или DOWNTO

59 Undefined forward — Неопределенное опережающее описание

Возможные причины сообщения:

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

60 Too many procedures — Слишком иного процедур

Турбо Паскаль допускает не более 512 процедур или функций в одном модуле. Если Вы компилируете программу, то поместите некоторые процедуры или функции в модули. Если Вы компилируете модуль, то разбейте его на два или несколько модулей

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

Если
ошибка возникает при компиляции внутри
TP,
Турбо Паскаль активизирует окно
редактирования и помещает курсор на
место ошибки в исходной программе.

Если
ошибка возникает при использовании
командно-строчного компилятора, Турбо
Паскаль выдает сообщение об ошибке,
выводит на экран исходную строку
программы с ошибкой и ее номер; символ
^ в выдаваемой исходной строке указывает
местоположение ошибки. Ошибки
подразделяются на:

  • ошибки
    при компилировании программы;

  • ошибки
    на уровне DOS;

  • ошибки
    ввода-вывода.

Ошибки при компилировании

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 (
Ошибка
в
константе
целого
типа)

Ошибка
в синтаксисе константы целого типа
(Учтите, что после чисел, превышающих
диапазон представления целых чисел,
должны ставиться точка и нуль, например
12345678912.0.).

8
String constant exceeds line (Строковая константа
превышает размеры строки)

Вероятно, после
строковой константы отсутствует символ
кавычка.

9
Too many nested files (Слишком много вложенных
файлов)

Компилятор допускает
не более 15 вложенных исходных файлов и
не более 4 включаемых файлов.

10
Unexpected end of file (
Неожиданный
конец
файла)

Данное сообщение
может появиться по одной из следующих
причин:

В Вашей программе,
вероятнее всего, неодинаковое количество
операторов BEGIN и END.

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

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

11
Line too long (Строка слишком длинная)

Максимальная длина
строки не может превышать 127 символов.

12
Type Identifier expected (Ожидается идентификатор
типа)

В определенном
месте не указан тип идентификатора.

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

В
файле CONFIG.SYS не установлен параметр
FILES = N, где N — представляет собой целое
число без знака. Установите в файле
CONFIG.SYS значение параметра FILES = N >= 30.

14
Invalid file name (Недопустимое имя файла)

Имя файла неверно
или указан несуществующий путь.

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

Файл
не найден ни в одном из каталогов,
предназначенных для хранения файлов
данного типа.

16
Disk full (Диск заполнен)

Удалите
с диска ненужные Вам файлы (например
файлы с расширением .ВАК или .ТМР) или
попробуйте сохранить текст программы
на другом диске, который имеет достаточный
объем свободной памяти.

17
Invalid compiler directive (Недопустимая директива
компилятора)

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

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

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

19
Undefined type la 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 objects (
Компоненты
файла
не
могут
быть
файлами
или
объектами)

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

25Invalid
string length (Неверная длина строки)

Длина описываемой
строки должна находиться в пределах
от 1 до 255.

26
Type mismatch (Несоответствие типов)

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

Несовместимы типы
переменной и выражения в операторе
присваивания.

Несовместимые
типы фактического и формального
параметров в обращении к процедуре или
функции.

Тип выражения
несовместимый с типом индекса при
индексировании массива.

Несовместимые
типы операндов в выражении.

27
Invalid subrange base type (Неправильный базовый
тип для интервала)

28Lower
bound greater than upper bound (
Нижний
граница
превышает
верхнюю)

При
описании интервального типа данных Вы
объявили нижнюю границу диапазона
больше верхней.

29
Ordinal type expected (Ожидается перечисляемый
тип)

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

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

31
Constant expected (Ожидается константа)

32
Integer or real constant expected (Ожидается константа
целого или вещественного типа)

33Pointer
type Identifier expected (Ожидается идентификатор
типа указатель)

Указанный курсором
идентификатор не является указателем.

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

Правильными типами
результата функции являются все простые,
строковые и ссылочные типы.

35
Label Identifier expected (Ожидается идентификатор
метки)

Обнаружена ссылка
на метку, не описанную в разделе LABEL.

36
BEGIN expected (Ожидается оператор BEGIN)

37
END expected (Ожидается оператор END)

38
Integer expression expected (Ожидается выражение
целого типа)

39
Ordinal expression expected (Ожидается выражение
перечисляемого типа)

40
Boolean expression expected (Ожидается выражение
логического типа)

41
Operand types do not match operator (
Несоответствие
типов
операнду)

Данная
операция не может применяться к операндам
этого типа. Такое сообщение будет
вызвано, например, при попытке выполнить
следующую операцию:’ 9′ DIV ‘G’ .

42
Error in expression (
Ошибка
в
выражении)

Данный
идентификатор не может участвовать в
выражении указанным образом.

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

43
Illegal assignment (Запрещенное присваивание)

Это сообщение
может появиться по следующим причинам:

  • файлам
    и нетипизированным переменным нельзя
    присваивать значения;

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

44
Field Identifier expected (Ожидается идентификатор
поля)

Данный идентификатор
не соответствует полю предшествующей
переменной типа RECORD или OBJECT.

45
Object file too large (Объектный файл слишком
большой)

Турбо Паскаль не
может компоновать OBJ-файлы размером
больше чем 64 Кбайта.

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

Внешняя процедура
или функция не имеет соответствующего
определения PUBLIC в объектном файле.
Убедитесь, что вы указали все объектные
файлы в директивах {$L <имя ОВJ-файла>),
и проверьте написание идентификаторов
процедуры или функции в файле .ASM.

47
Invalid object file record

(Недопустимая
запись объектного файла)

Файл .OBJ содержит
неверную объектную запись. Убедитесь
в том, что данный файл является
действительно OBJ-файлом.

48
Code segment too large (Сегмент кода слишком
большой)

Максимально
допустимый размер кода программы или
программного модуля ранен 65520 байтам.
Разбейте Вашу программу или программный
модуль на несколько частей.

49
Data segment too large (Сегмент данных слишком
большой)

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

50
DO expected (Ожидается оператор DO)

51
Invalid PUBLIC definition (
Недопустимое
определение
PUBLIC)

Появление этого
сообщения возможно но следующим причинам:

  • Данный
    идентификатор получил тип PUBLIC с помощью
    соответствующей директивы языка
    ассемблер, но не соответствует описанию
    EXTERNAL в программе или программном модуле.

  • Две
    или более директивы PUBLIC на языке
    ассемблера определяют один и тот же
    идентификатор.

  • OBJ-файл
    определяет идентификатор PUBLIC вне
    сегмента CODE.

52
Invalid EXTRN definition (Неправильное определение
EXTRN)

Появление этого
сообщения возможно по следующим причинам:

Из Ассемблера была
осуществлена ссылка с помощью директивы
EXTRN на идентификатор, который не был
описан в тексте Паскаль-программы.

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

Идентификатор
обозначает процедуру или функцию типа
INLINE.

53
Too many EXTRN definition (Слишком много определений
типа EXTRN)

Турбо
Паскаль не может обрабатывать файлы
.OBJ при более чем 256 определениях EXTRN.

54
OF expected (
Ожидается
оператор
OF)

55
INTERFACE expected (
Ожидается
оператор
INTERFACE)

56
Invalid relocatable reference (
Недопустимая
перемещаемая
ссылка)

Появление этого
сообщения возможно по следующим причинам:

  • OBJ-файл
    содержит данные и перемещаемые ссылки
    в сегментах, отличных от CODE, например,
    при попытке описать инициализированные
    переменные в сегменте DATA.

  • ORJ-файл
    содержит ссылки с размерами в байтах
    на перемещаемые символы. Такая ошибка
    происходит в случае использования
    операторов HIGH и DOWN с перемещаемыми
    символами или, если Вы ссылаетесь в
    директивах DB на перемещаемые символы.

  • Операнд
    ссылается на перемещаемый символ,
    который не был определен в сегментах
    CODE или DATA.

  • Операнд
    ссылается на процедуру EXTRN или функцию
    EXTRN со смещением, например CALL SortProc+8.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Среда Турбо-Паскаля обладает мощными средствами обнаружения и локализации ошибок. В случае обнаружения ошибки она идентифицируется курсором. При этом в верхней строке окна редактора появляется диагностическое сообщение. После нажатия на любую клавишу, кроме(F1) верхняя строка восстанавливает свой первоначальный вид, и среда переходит к режиму редактирования. Если после появления сообщения об ошибке нажать функциональную клавишу F1, на экране появиться окно справочной службы с детальной информацией об ошибке и рекомендациями по ее устранению. Некоторые ошибки в исходном тексте обнаруживаются не сразу, а в ходе продолжающегося контекстного разбора. Например, несоответствие типов в операторе присваивания не может быть обнаружено до тех пор, пока не будет вычислено целиком выражение в правой части этого оператора. В таких случаях ищите ошибку слева от курсора или в предыдущей строке текста. Ниже приводятся сообщения об ошибках в том виде, в каком они появляются в верхней строке окна редактора, а также перевод сообщений справочной службы.

1. Out of memory (Выход за границы памяти)
2. Identifier expected (Не указан идентификатор)
3. Unknown identifier (Неизвестный идентификатор)
4. Duplicate identifier (Двойной идентификатор)
5. Syntax error (Синтаксическая ошибка)
6. Error in integer constant (Ошибка в целой константе)
7. String constant exceeds fine (Строковая константа превышает допустимые размеры)
8. Error in real constant (Ошибка в вещественной константе)
9. Unexpected end of file (Не найден конец файла)
10. Line too tons (Слишком длинная строка)
11. Type identifier expected (Здесь нужен идентификатор типа)
12. Too many open files (Слишком много открытых файлов)
13. File not found (Файл не найден)
14. Invalid file name (Неверное имя файла)
15. Disk full (Диск заполнен)
16. Undefiner typein pointer definition (Неопределенный тип в объявлении указателя)
17. Variable identifier expected (Отсутствует идентификатор переменной)
18. Error in type (Ошибка в объявлении типа)
19. Structure too large (Слишком большая структура)
20. Set-base type of range (Базовый тип множества нарушает границы)
21. File components may not be files (Компонентами файла не могут быть файлы)
22. Invalid string length (Неверная длина строки)
23. Type mismatch (Несоответствие типов)
24. Invalid subrange base type (Неправильный базовый тип для типа диапазона)
25. Lower bound greater than upper bound (Нижняя граница больше верхней)
26. Ordinal type expected (Нужен порядковый тип)
27. Integer constant expected (Нужна целая константа)
28. Consant expected (Нужна константа)
29. Integer or real constant expected (Нужна целая или вещественная константа)
30. Pointer type identifier expected (Нужен идентификатор типа)
31. Invalid function result type (Неправильный тип результата функции)
32. Label identifier expected (Нужен идентификатор метки)
33. BEGIN expected (Нужен BEGIN)
34. END expected (Нужен END)
35. Integer expression expected (Нужно выражение типа INTEGER)
36. Ordinal expresiion expected (Нужно выражение перечисляемого типа)
37. Boolean expression expected (Нужно выражение типа BOOLEAN)
38. Operand types do not match operator (Типы операндов не соответствуют операции)
39. Error in expression (Ошибка в выражении)
40. Illegal assigment (Неверное присваивание)
41. Field identifier expected (Нужен идентификатор поля)
42. Code segment too large (Сегмент кода слишком большой)
43. Data segment too large (Сегмент данных слишком велик)
44. DO expected (Нужен оператор DO)
45. OF expected (Требуется OF)
46. INTERFACE expected (Требуется интерфейсная секция)
47. Invalid relocatable refence (Неправильная перемещаемая ссылка)
48. THEN expected (Требуется THEN)
49. TO or DOWNTO expected (Требуется TO или DOWNTO)
50. Undefiner forward (Неопределенное опережающее описание)
51. Invalid typecast (Неверное преобразование типа)
52. Division by zero (Деление на нуль)
53. Invalid file type (Неверный файловый тип)
54. Cannot Read or Write variables of this type (Нет возможности считать или записать переменые данного типа)
55. Pointer variable expected (Нужно использовать переменную-указатель)
56. String variable expected (Нужна строковая переменная)
57. String expression expected (Нужно выражение строкового типа)
58. Circular unit refence (Перекрестная ссылка модулей)
59. Unit name mismatch (Несоответствие имен программных модулей)
60. Unit version masmatch (Несоответствие версий модулей)
61. Internal stack overflow (Переполнение внутреннего стока)
62. Unit file format error (Ошибка формата файла модуля)
63. Implementation expected (Отсутствует исполняемая часть модуля)
64. Constant and case types do not match (Типы констант и тип выражений оператора CASE не соответствуют друг другу)
65. Record or object variable expected (Нужна переменная типа запись или объект)
66. Constant out of range (Константа нарушает границы)
67. File variable expected (Нужна файловая переменная)
68. Pointer expression expected (Нужно выражение типа указатель)
69. Integer or real expression expected (Нужно выражение вещественного или целого типа)
70. Label not within current block (Метка не находится внутри текущего блока)
71. Label already defined (Метка уже определена)
72. Undefined label in processing statement part (Неопределенная метка в предшествующем разделе операторов)
73. Invalid @ argement (Неправильный аргумент операции @)
74. Unit expected (Нужно кодовое слово Unit)
75. <;> expected (Нужно указать <;>)
76. <:> expected (Нужно указать <:>)
77. <,> expected (Нужно указать <,>)
78. <(> expected (Нужно указать <(>)
79. <)> expected (Нужно указать <)>)
80. <-> expected (Нужно указать <->)
81. <:=> expected (Нужно указать <:=>)
82. <[> or <(.>expected (Нужно указать <[> или <(.>)
83. <]> or <.)> expected (Нужно указать <]> или <.)>)
84. <.> expected (Нужно указать <.>)
85. <..> expected (Нужно указать <..>)
86. Too many variables (Слишком много переменных)
87. Invalid FOR control variable (Неправильный параметр цикла оператора FOR)
88. Integer variable expected (Нужна переменная целого типа)
89. Files types are not allowed here (Здесь не могут использоваться файлы)
90. String length mismatch (Несоответствие длины строки)
91. Invalid orering of fields (Неверный порядок полей)
92. String constant expected (Нужна константа строкового типа)
93. Integer or real variable expected (Нужна переменная типа INTEGER или REAL)
94. Ordinal vairale expected (Нужна переменная порядкового типа)
95. Character expression expected (Предшествующее выражение должно символьный тип)
96. Overflow in arithmetic operation (Переполнение в арифметической операции)
97. No enclosing For, While or Repeat statement (Операторы For, While или Repeat без окончания)
98. Case constant out of range (Константа Case нарушает допустимые границы)
99. Error in statement (Ошибка в операторе)
100. Must be in 8087 mode to compile this (Для компиляции необходим режим 8087)
101. Target address not found (Указанный адрес не найден)
102. Include files are not allowed here (Здесь не допускаются включаемые файлы)
103. Invalid qualifier (Неверный квалификатор)
104. Invalid variable refence (Недействительная ссылка на переменную)
105. Too many symbols (Слишком много обозначений)
106. Statement part too large (Слишком большой раздел операторов)
107. Files must be var parameters (Файлы должны передаваться по имени)
108. Header does not match previous definition (Заголовок не соответствует предыдущему определению)
109. Cannot evaluate this expression (Некорректное вычисление выражения)
110. Invalid format specifier (Неверный спецификатор формата)
111. Invalid indirect refence (Недопустимая косвенная ссылка)
112. Structured variable are not allowed here (Здесь нельзя использовать переменную структурного типа)
113. Cannot evaluate without System unit (Нельзя вычислить выражение без модуля SYSTEM)
114. Cannot access this symbol (Нет доступа к данному символу)
115. Invalid floating-point operation (Недопустимая операция с плавающей запятой)
116. Procedure or function variable expected (Должна использоваться переменная процедурного типа)
117. Invalid procedure or function refence (Недопустимая ссылка на процедуру или функцию)
118. File access denied (Отказ в доступе к файлу)
119. Object type expected (Здесь должен быть тип OBJECT)
120. Local object types are not allowed (Нельзя объявлять локальные объекты)
121. VIRTUAL expected (Пропущено слово VIRTUAL)
122. Method identifier expected (Пропущен идентификатор инкапсулированного правила)
123. Virtual constructor are not allowed (Конструктор не может быть виртуальным)
124. Destructor identifier expected (Пропущен идентификатор деструктора)
125. Fail only allowed within constructor (Неизвестный модуль)
126. Invalid combination of opcode and operends (Недопустимая комбинация кода команды и операндов)
124. Memory refence expected (Нужна ссылка на память)
125. Invalid symbol refence (Неверное обозначение ссылки)
126. Code generation error (Ошибка при генерации программы)
127. Duplicate dynamic method index (Повторяется индекс динамического правила)
128. Procedure or function identifier expected (Нужен идентификатор процедуры или функции)

2) Ошибки, возникающие во время выполнения программы

Некоторые ошибки, обнаруженные во время выполнения программы, приводят к
появлению на экране сообщения вида:
Runtime error nnn at xxxx:yyyy
(ошибка периода исполнения nnn по адресу xxxx:yyyy), где nnn- номер ошибки,
xxxx:yyyy- адрес (сегмент и смещение). После этого сообщения программа завершает
свою работу.
Ошибки периода исполнения делятся на четыре категории:
1) Ошибки, обнаруживаемые ДОС (коды ошибок 1-99);
2) Ошибки вводавывода (100-149);
3) Критические ошибки (150-199);
4) Фатальные ошибки (200-255);

3) Ошибки, обнаруживаемые ДОС
1. Invalid function number (Неверный номер функции)
2. File not found (Не найден файл)
3. Path not found (Путь не найден)
4. Too many open files (Слишком много открытых файлов)
5. File access defined (Отказано в доступе к файлу)
6. Invalid file handle (Недопустимый файловый канал)
7. Invalid file access code (Недействительный код доступа к файлам)
8. Invalid drive number (Недопустимый номер дисковода)
9. Cannot remove current directory (Нельзя удалить текущий каталог)
10. Cannot rename across drives (Нельзя при переименовании указывать разные дисководы)

4) Ошибки вводавывода
1. Disk read error (Ошибка чтения с диска)
2. Disk write error (Ошибка записи на диск)
3. File not assigned (Файлу не присвоено имя)
4. File not open (Файл не открыт)
5. File not openor output (Файл не открыт для вывода)
6. Invalid numeric format (Неверный числовой формат)

5) Критические ошибки
1. Disk is write protected (Диск защищен от записи)
2. Unknown unit (Неизвестный модуль)
3. Drive not ready (Дисковод находится в состоянии «Не готов «)
4. Unknown command (Неопознанная команда)
5. CRC error in data (Ошибка в исходных данных)
6. Bad drive request strukture length (При обращении к диску указана неверная длина структуры)
7. Disk seek error (Ошибка при операции установки головок на диск)
8. Unknown media type (Неизвестный тип носителя)
9. Sector not found (Сектор не найден)
10. Printer out of paper (Кончилась бумага на принтере)
11. Device writeemit (Ошибка при записи на устройство)
12. Device read fault (Ошибка при чтении с устройства)
13. Hardware failure (Сбой аппаратуры)

6) Фатальные ошибки
Эти ошибки всегда приводят к немедленной остановке программы.
1. Division by zero (Деление на нуль)
2. Range check error (Ошибка при проверке границ)
3. Stack overflow error (Переполнение стека)
4. Hearp overflow error (Переполнение кучи)
5. Invalid pointer operation (Недействительная операция с указателем)
6. Floating point overflow (Переполнение при операции с плавающей запятой)
7. Invalid floating point operation (Недопустимая операция с плавающей запятой)
8. Floating point underflow (Исчезновение порядка при операции с плавающей запятой)
9. Object not initialized (Не инициирован объект)
10. Call to abstract method (Вызов абстрактного правила)

 

Похожие публикации: Pascal

41 Operand types do not match operator — Типы операндов не соответствуют операции

Данная операция не может быть применена к указанным операндам, например, ‘А’ div ‘2’

42 Error in expression — Ошибка в выражении

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

43 Illegal assignment — Неверное присваивание

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

44 Field identifier expected — Нужен идентификатор поля

Попытка использовать запись целиком в том месте, где требуется ссылка на какое-либо поле записи

45 Object file too large — Объектный файл слишком большой

Турбо Паскаль не может компоновать файлы .OBJ больше 64 Кбайт

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

Внешняя процедура или функция не имеет соответствующего определения PUBLIC в объектном файле. Убедитесь, что Вы указали все объектные файлы в директивах {$L <имя .OBJ-файлa>} и проверьте написание идентификаторов процедуры или функции в файле . ASM

47 Invalid object file record — Неправильная запись объектного файла

Файл .OBJ содержит неверную объектную запись. Убедитесь, что данный файл является действительно файлом .OBJ

48 Code segment too large — Сегмент кода слишком большой

Максимальный размер кода программы или программного модуля равняется 65520 байтам. Разбейте Вашу программу или модуль на два или более модулей

49 Data segment too large — Сегмент данных слишком велик

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

50 DO expected — Нужен оператор DO

51 Invalid PUBLIC definition — Неверное PUBLIC-определение

Возможные причины сообщения:

— данный идентификатор получил тип PUBLIC с помощью соответствующей директивы языка ассемблера, но не соответствует описанию EXTERNAL в программе или программном модуле Паскаля
— две или более директивы PUBLIC языка ассемблера определяют один и тот же идентификатор
— файлы .OBJ определяют символы PUBLIC, не находящиеся в сегменте CODE

52 Invalid EXTRN definition — Неправильное EXTRN-определение

Возможные причины сообщения:

— программа на ассемблере ссылается с помощью директивы EXTRN на идентификатор, который не описан в программе на Паскале и не был описан в интерфейсных секциях используемых программных модулей
— ассемблерная программа ссылается на идентификатор, обозначающий абсолютную переменную (т.е. определенную словом ABSOLUTE)
— ассемблерная программа ссылается на идентификатор процедуры или функции типа INLINE

53 Too many EXTRN definition — Слишком много EXTRN-определений

Турбо Паскаль не может обрабатывать файлы .OBJпри более чем 256 определениях EXTRN

54 OF expected — Требуется OF

55 INTERFACE expected — Требуется интерфейсная секция

56 Invalid relocatable reference — Неправильная перемещаемая ссылка

Возможные причины сообщения:

— файл .OBJ содержит данные и перемещаемые ссылки в сегментах, отличных от CODE. Например, Вы пытаетесь описать инициализированные переменные в сегменте DATA
— файл .OBJ содержит ссылки с размерами в байтах на перемещаемые символы. Такая ошибка происходит в случае, если Вы используете операторы HIGH и LOW с перемещаемыми символами или если Вы ссылаетесь в директивах DB на перемещаемые символы
— операнд ссылается на перемещаемый символ, который не был определен в сегменте CODE или в сегменте DATA
— операнд ссылается на процедуру EXTRN или функцию EXTRN со сдвигом, например, CALL SortProc+8

57 THEN expected — Требуется THEN

58 TO or DOWNTO expected — Требуется ТО или DOWNTO

59 Undefined forward — Неопределенное опережающее описание

Возможные причины сообщения:

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

60 Too many procedures — Слишком иного процедур

Турбо Паскаль допускает не более 512 процедур или функций в одном модуле. Если Вы компилируете программу, то поместите некоторые процедуры или функции в модули. Если Вы компилируете модуль, то разбейте его на два или несколько модулей

№ п/п Код и название ошибки Характеристика ошибки Пояснение

1

Error 1: Out of memory

Нехватка памяти

Это сообщение выводится, когда компилятору не хватает памяти

2

Error 2: Identifier expected

Ожидался идентификатор

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

3

Error 3: Unknown identifier

Неизвестный идентификатор

Этот идентификатор не был описан

4

Error 4: Duplicate identifier

Идентификатор продублирован

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

5

Error 5: Syntax error

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

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

6

Error 6: Error in real constant

Ошибка в константе действительного типа

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

7

Error 7: Error in integer constant

Ошибка в константе целого типа

Константы, выходящие за пределы диапазона типа longint описы-ваются как действительные числа

8

Error 10: Unexpected end of file

Неожиданный конец файла

Количество операторов Begin и End не сбалансирована

9

Error 11: Line too long

Строка слишком длинная

Длина строки не должна превышать 127 символов

10

Error 12: Type identifier expected

Ожидается иденти-фикатор типа

Этот идентификатор не обозначает тип, как это должно быть

11

Error 15: File not found

Файл не найден

Файл не был найден ни в текущем каталоге, ни в других каталогах

12

Error 20: Variable identifier expected

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

Этот идентификатор не обозначает переменной, как должен был

13

Error 21: Error in type

Ошибка в типе

Этот символ не может начинать описание типа

№ п/п Код и название ошибки Характеристика ошибки Пояснение

14

Error 25: Invalid string length

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

Описанная максимальная длина строки должна быть в диапазоне 1…255

15

Error 26: Type mismatch

Несоответствие типов

Несовместимые типы переменной и выражения в операторе присваива-ния, несовместимые типы операн-дов в выражении, несовместимые типы формальных и фактических параметров в вызванной подпрограмме

16

Error 31: Constant expected

Ожидается константа

17

Error 32: Integer or real constant expected

Ожидается целая или действительная константа

18

Error 34: Invalid function result type

Неправильный тип результата функции

Правильными типами результата функции являются все простые типы

19

Error 36: BEGIN expected

Ожидается оператор Begin

20

Error 37: END expected

Ожидается оператор End

21

Error 38: Integer expression expected

Ожидается целое выражение

Предыдущее выражение должно быть целого типа

22

Error 41: Operand types do not match operator

Типы операндов не отвечают оператору

Оператор не может быть применён к операндам указанного типа

23

Error 42: Error in expression

Ошибка в выражении

Этот символ не может присутствовать в выражении

24

Error 50: DO expected

Ожидается служебное слово do

25

Error 54: Of expected

Ожидается служебное слово of

26

Error 57: THEN expected

Ожидается служеб-ное слово Then

№ п/п Код и название ошибки Характеристика ошибки Пояснение

27

Error 58: TO or DOWNTO expected

Ожидается служеб-ное слово to или downto

28

Error 62: Division by zero

Деление на нуль

Предыдущая операция пытается выполнить деление на нуль

29

Error 92: «[» or «(.» expected

Тут должна быть открывающая квадратная скобка

Вместо открывающей квадратной скобки можно использовать «(.»

30

Error 93: «]» or «).» expected

Квадратные скобки не закрыты

Вместо закрывающей квадратной скобки можно использовать «).»

31

Error 98: Integer variable expected

Ожидается переменная целого типа

32

Error 103: Integer or real variable expected

Ожидается пере-менная целого или вещественного типа

33

Error 108: Overflow in arithmetic operation

Переполнение в арифметической операции

Результат предыдущей операции выходит за пределы использованного типа данных.

34

Error 113: Error in statement

Ошибка в операторе

Оператор не может начинаться с этого символа

No match for operator c++ is an error that typically occurs when you’re trying to print something that’s not pre-defined in this programming language. However, “no match for operator c++” is just one part of the error, and to understand what’s really causing it and how you can solve it, you need to look at the whole error, including what it says in the parentheses.No Match for Operator C

In this article, we’ll take a look at the different instances of this error, when they show up, and what you can do to solve the problem.

Contents

  • What Causes No Match for Operator C++? All Common Reasons
    • – Error: No Match for ‘Operator<<’ in ‘Std::Operator<<[with_traits = Std::char_traits<Char>]
    • – No Match for ‘Operator<<’ (Operand Types Are ‘Std::Ostream {aka Std::basic_ostream}’ and ‘Std::Vector’)
    • – No Match for Operator = Iterator C++ and Other Reasons
  • Getting Rid of the Error: No Match for Operator C++
    • – Adding Operator <<
  • FAQs
    • 1. What Does Operator Overloading Mean In C++?
    • 2. Why Does No Match For Operator C++ Occur When Printing Variables?
  • Conclusion

What Causes No Match for Operator C++? All Common Reasons

The causes of no match for operator c++ error differ from one case to the other. If it says no match for operator << in std::operator, that means the compiler doesn’t know how you want your object or structure to be printed. Moreover,, cout << doesn’t work for all types.

– Error: No Match for ‘Operator<<’ in ‘Std::Operator<<[with_traits = Std::char_traits<Char>]

To completely understand the error, we’ll have to look at it on a case-by-case basis. The first case is where the error says there’s no match for operator<< in std::operator.

Here, you see the error because the compiler doesn’t really know how you want the structure to be printed, and it can’t find the matching overload for the operator <<. The rest of the error message is just the compiler listing the different operator<< overloads that were not a match. The operator provided by the standard library doesn’t know what to do with the user-defined type mystruct, and it only works with pre-defined data types.

– No Match for ‘Operator<<’ (Operand Types Are ‘Std::Ostream {aka Std::basic_ostream}’ and ‘Std::Vector’)

Operators like << and + are basically like functions. Just like classes can override member functions in order to change their behavior, you can do the same for operators. This is known as operator overloading. And you’ve probably been using it in many places without realizing it. For instance, “<<” in cout << and cin >> is an operator.No Match for Operator C Causes

Cout << can work with many types, but in some cases, it can throw an error. For instance, the following code snippet will produce the error: no match for ‘operator<<’ (operand types are…):

#include <iostream>

#include <vector>

using std::cout; using std::endl;

using std::vector;

int main() {

vector<int> vec = {1, 2, 3};

cout << vec << endl;

return 0;

Sometimes, you might also see this error when trying to print the return of the vector with std::cout.

– No Match for Operator = Iterator C++ and Other Reasons

When you see this error, it typically means that you’re calling ‘begin’ on a copyin. The latter is a const and if you call begin on this, it’ll give you an immutable iterator, which is what causes the error.

  • There can be a few other reasons for this error. These include the following:
  • In some cases, you might also see this error if you try to use an object that isn’t a variable, like a timer object in Arduino. So if you try and do normal variable operations with this object like timer = timer + pirConstTimer, you’ll come across the error “no match for operator.”
  • The problem can also be the type of array or input variable that you defined. If they’re of the same or of compatible types, it’s necessary to also show their definition. But if they’re of the same primitive types like int, then there’s a problem. There’s a high chance that the types aren’t built-in and didn’t overload the < and > operators.
  • Another cause could be you trying to print a void function or statement. If the function is void, i.e., it doesn’t return anything, you can’t print something. And if you want to print using a cout function, then the function should return something like a double, int, string, etc.

Getting Rid of the Error: No Match for Operator C++

To solve the error: no match for operator C++, you need to explicitly tell it by providing a function called operator<< that basically takes parameters: ostream and your structure type. In other words, you need to perform operator overloading so that operator << can take the user-defined data type.



– Adding Operator <<

In addition to the small fixes mentioned above, there are a few more things you can try out, but the most important thing is to perform operator overloading. To do so, you need to add something like this to your code snippet:

friend ostream& operator << (ostream& os, const mystruct& m)

In this line of code, the operator<< is a function that takes two parameters: ostream and your type, which, in this case, is a const called mystruct. Always remember that the first parameter will always be the reference to the ostream object while the second parameter will be the user-defined object, which is also why the operator function must be implemented as a non-member function.Adding Operator

Typically, it is implemented as a friend function, since it allows them to get access to the private attributes of a user-defined type. Sometimes, this is the only way you can access them, especially if the user-defined type has not exposed the attributes through getters.

So, continuing with the example above and adding operator overloading to it, this is what the final code will then look like:

#include <iostream>

#include <vector>

using std::cout; using std::endl;

using std::vector;

std::ostream& operator<<(std::ostream& os, const vector& vec) {

for (vector::const_iterator it = vec.cbegin();

it != vec.cend(); ++it)

{

os << *it << ‘ ‘;

}

return os;

}

int main() {

const vector<int> vec = {1, 2, 3};

cout << vec << endl;

return 0;

FAQs

1. What Does Operator Overloading Mean In C++?

In C++, you can provide operators with a special meaning for a certain data type and this is known as operator overloading and is compile-time polymorphism. C++ allows the user to change operators such that they work for user-defined classes.

The basic idea is to give special meaning to an existing C++ operator without modifying its original meaning. For instance, you can overload the ‘+’ operator in a string class so that you can concatenate (or add) two strings just by using +. Similarly, you can overload arithmetic operators in other classes like big integers, fractional numbers, and complex numbers.

2. Why Does No Match For Operator C++ Occur When Printing Variables?

You see no match for operator error when you try to print the variables present in an object using cout. The object is a collection of variables and if you want to print or display the things like the methods inside the object, declaring a getter is mandatory.

Conclusion

Now that you’ve read through the whole article, we’re sure you understand why you see the error ‘no match for operator’ when using c++ and how you can go about solving it. Let’s see the key points that we discussed in this article so that you know how you can avoid the error in the first place:

  • The cause of the error differs depending on what the error message says in the parentheses after “no match for operator.”
  • It could be because the compiler can’t find the matching overload for the operator << or you’re trying to print the return of a vector with std::cout.
  • The error might also appear when you use cout to print variables in an object, when using an object that isn’t a variable, or when printing a void statement.
  • In most cases, you should be able to solve the problem by operator overloading.
  • Operator overloading involves giving special meaning to an operator so that it works for user-defined classes.

After reading our explanation of the error, its cause, and how you can solve it, we’re sure that you know what you need to do next to make sure you don’t see the error anymore!

  • Author
  • Recent Posts

Position is Everything

Your Go-To Resource for Learn & Build: CSS,JavaScript,HTML,PHP,C++ and MYSQL. Meet The Team

Position is Everything

  • Forum
  • Beginners
  • no match for operator>>

no match for operator>>

Your Go-To Resource for Learn & Build: CSS,JavaScript,HTML,PHP,C++ and MYSQL. Meet The Team

Position is Everything

  • Forum
  • Beginners
  • no match for operator>>

no match for operator>>

Hi, so I’m a total beginner and am having trouble trying to overload the insertion operator. When I try it tells me «error: no match for ‘operator>>’ (operand types are ‘std::istream’ {aka ‘std::basic_istream’} and ‘int’)»

Here is the header:

1
2
3
4
5
6
7
8
9
10
11
12
  #include <iostream> 
using namespace std;

class myArray {
    public:
    myArray(int len = 0);
    int operator[](int i) { return a[i]; }
    friend istream& operator>> (istream &in,  myArray &x);
    private:
    int arrayLen;
    int a[];
};

And this is the implementation file:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream> 
#include "myArray.h"
using namespace std;

myArray::myArray(int len){
    arrayLen = len;
}

myArray::istream& operator>> (istream &in,  myArray &x)
{
    in >> x.a;
    return in;
}

I assume that I have a type mismatch, but I guess I’m a little thick, because I don’t see it.

What do YOU think line 11 is doing in the 2nd one?
How big do you think that A array is?

you cannot cin an array. you have to loop and read one by one.
and C style arrays need a fixed size at compile time; the only way around this is a pointer of some sort (whether done for you or not).

edit, misread what you did, the >> is fine apart from trying to read and write an array.

Last edited on

There are three main issues with your code.

The first issue is that your array a is not specified as having any size. The size of arrays, whether in a class or not, must be known at compile time.

The second issue is second snippet, line 9: myArray::istream& is not a type. You meant to just write istream&.

The third issue is second snippet, line 11: You are calling >> on an array (a). Presumably you meant to call something more like:

1
2
in >> x.a[arrayLen];
arrayLen++;

You should also be thinking about bounds checking, e.g. (if arrayLen == maxSize) { don’t add to array }. This is assuming you have some notion of «MaxSize» (see first issue).

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
#include <iostream>

using namespace std;

constexpr int MaxSize = 1000;

class myArray {
public:
    myArray(int len = 0);
    int operator[](int i) const { return array[i]; }
    friend istream& operator>> (istream &in,  myArray &x);
    
    //private: // making public for demonstration
    int arrayLen;
    int array[MaxSize];
};

myArray::myArray(int len)
: arrayLen(len) {

}

istream& operator>> (istream &in,  myArray &arr)
{
    if (arr.arrayLen < MaxSize)
    {
        in >> arr.array[arr.arrayLen];
        arr.arrayLen++;
    }

    return in;
}

int main()
{
    myArray myArr;
    std::cin >> myArr >> myArr >> myArr;

    for (int i = 0; i < myArr.arrayLen; i++)
    {
        std::cout << myArr.array[i] << 'n';
    }
}

Last edited on

So does that mean that I could do this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream> 
#include "myArray.h"
using namespace std;


myArray::myArray(int len)
{
arrayLen=len;
}

istream& operator>> (istream &in,  myArray &arr)
{
    if (arr.arrayLen < MaxSize)
    {
        in >> arr.array[arr.arrayLen];
        arr.arrayLen++;
    }

    return in;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream> 
using namespace std;

constexpr int MaxSize = 1000;

class myArray {
    public:
    myArray(int len = 0);
    int operator[](int i) { return array[i]; }
    friend istream& operator>> (istream &in,  myArray &x);
    private:
    int arrayLen;
    int array[MaxSize];
};

Wait, no, that still doesn’t work… Okay, I still seem to be misunderstanding something.

What does «not work» mean?

The same error comes up about «no match for ‘operator>>’ (operand types are ‘std::istream’ {aka ‘std::basic_istream’} and ‘int’)»

Perhaps something like:

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
#include <iostream>

constexpr size_t MaxSize {1000};

class myArray {
public:
	myArray() {}
	size_t size() const { return arrayLen; }

	int operator[](size_t i) { return array[i]; }
	const int operator[](size_t i) const { return array[i]; }
	friend std::istream& operator>> (std::istream& in, myArray& x);

private:
	size_t arrayLen {};
	int array[MaxSize] {};
};

std::istream& operator>> (std::istream& in, myArray& arr) {
	if (arr.arrayLen < MaxSize)
		in >> arr.array[arr.arrayLen++];

	return in;
}

int main() {
	myArray myArr;

	std::cin >> myArr >> myArr >> myArr;

	for (size_t i {}; i < myArr.size(); ++i)
		std::cout << myArr[i] << 'n';
}

person5273, your code that you have shown does not have problems, assuming it’s being successfully compiled/linked by however you are building it. I was able to copy and paste it into cpp.sh as one file and compile it (after removing the #include «myArray.h»), after adding a main function. So the problem exists in part of the code you are not showing.

The array size is specified at compile time.

Topic archived. No new replies allowed.

Возможно, вам также будет интересно:

  • Opera ошибка профиля при каждом запуске
  • Opera ошибка профиля невозможно прочитать файл профиля
  • Opera ошибка при направлении команды приложению opera
  • Opera ошибка при запуске приложения 0xc0000005
  • Opera ошибка не удалось открыть папку профиля

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии