Error: Incompatible types
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.82] |
|
|
ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Error: Incompatible types
|
Сообщ.
#1
,
|
|
|
|
![]() ![]() type<br> SomeRecord = record<br> ...<br> Caption: array[0..63]of ANSIChar;<br> end;<br><br>var<br> Rec: SomeRecord;<br> Cap: array[0..63]of ANSIChar;<br><br>begin<br> ...<br> Rec.Caption:=Cap; // Вот тут-то и выскакивает ошибка Incompatible types<br> Чем это можно объяснить? А лучше бы еще и заставить работать... ЗЫ: Если писать Rec.Caption:='Some caption' все работает прекрасно. Но мне-то надо из переменной брать значение! |
|
Сообщ.
#2
,
|
|
|
|
Межет сперва нужно обявить
type Cap: array[0..63]of ANSIChar а потом тулить его в рекорд? |
|
Сообщ.
#3
,
|
|
|
|
Type MyMas=array[0..63]of Char;
Type SomeRecord = record Caption: MyMas; end; var Rec: SomeRecord; Cap: MyMas; procedure TForm1.Button1Click(Sender: TObject); begin Rec.Caption:=Cap; end; |
|
Сообщ.
#4
,
|
|
|
|
Спасибо. При компиляции не ругается, пока не скажу, насколько правильно это будет работать в дальнейшем... Но вроде бы должно.
А все-таки, с чем связано появление вышеозначенной ошибки? |
|
Сообщ.
#5
,
|
|
|
|
А вот почему
Вот это n1: Integer; n2: Integer; и это n1,n2: Integer; с точки зрения компилятора не одно и тоже. Однак ошибку типов он не выводит, потому что самостоятельно приводит один тип к другому, а в случае с Char не может. |
|
Сообщ.
#6
,
|
|
|
|
ты, наверное, имеешь ввиду, что
A1: array[0..255]of Smth; и A2: array[0..255]of Smth; являются разными типами? А Integer - он и в африке Integer. |
|
Сообщ.
#7
,
|
|
|
|
Да они оба целые, но в памяти объявляются по разному.
|
|
Сообщ.
#8
,
|
|
|
|
Цитата Song, 16.05.03, 13:31:17 А вот почему Вот это n1: Integer; n2: Integer; и это n1,n2: Integer; с точки зрения компилятора не одно и тоже. Однак ошибку типов он не выводит, потому что самостоятельно приводит один тип к другому, а в случае с Char не может. А как они поразному располагаются в памяти? |
|
Сообщ.
#9
,
|
|
|
|
Вот это не копал, хотя была мысля, но некогда. Кстати это даже в хэлпе написано, правда не помню где
(хотел процитировать, не получилось) |
|
Сообщ.
#10
,
|
|
|
|
type
SomeRecord = record ... Caption: array[0..63]of ANSIChar; end; var Rec: SomeRecord; Cap: array[0..63]of ANSIChar; begin ... Rec.Caption:=Cap; // Вот тут-то и выскакивает ошибка Incompatible types [/code] Чем это можно объяснить? Q: Радной это тип "type", это переменная "var" - принципиально разные вещи. Скорее так: type type1 = record ... type2: array[0..63]of ANSIChar; var Rec: type1; Cap,: type2; Caption: type2; |
|
Сообщ.
#11
,
|
|
|
|
Цитата Song, 16.05.03, 15:11:07 Вот это не копал, хотя была мысля, но некогда. Кстати это даже в хэлпе написано, правда не помню где (хотел процитировать, не получилось)Может быть разное размещение в памяти, в первом случае не обязательно подряд, более наглядно это для таких случаев c1: char; e1: extended; c2: char; компилятор может разместить так e1, c1, c2 взависимости от выравнивания, если конечно в языке и компиляторе ничего не изменилось с давних времен. |