На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Error: Incompatible types
    ExpandedWrap disabled
      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' все работает прекрасно. Но мне-то надо из переменной брать значение!
      Межет сперва нужно обявить
      type
      Cap: array[0..63]of ANSIChar
      а потом тулить его в рекорд?
        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;
          Спасибо. При компиляции не ругается, пока не скажу, насколько правильно это будет работать в дальнейшем... Но вроде бы должно.
          А все-таки, с чем связано появление вышеозначенной ошибки?
            А вот почему

            Вот это

            n1: Integer;
            n2: Integer;

            и это

            n1,n2: Integer;

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

              ты, наверное, имеешь ввиду, что
              A1: array[0..255]of Smth;
              и
              A2: array[0..255]of Smth;
              являются разными типами?
              А Integer - он и в африке Integer.
                Да они оба целые, но в памяти объявляются по разному.
                  Цитата Song, 16.05.03, 13:31:17
                  А вот почему

                  Вот это

                  n1: Integer;
                  n2: Integer;

                  и это

                  n1,n2: Integer;

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


                  А как они поразному располагаются в памяти?
                    Вот это не копал, хотя была мысля, но некогда. Кстати это даже в хэлпе написано, правда не помню где :( (хотел процитировать, не получилось)
                      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;


                        Цитата Song, 16.05.03, 15:11:07
                        Вот это не копал, хотя была мысля, но некогда. Кстати это даже в хэлпе написано, правда не помню где :( (хотел процитировать, не получилось)


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

                        c1: char;
                        e1: extended;
                        c2: char;

                        компилятор может разместить так e1, c1, c2 взависимости от выравнивания, если конечно в языке и компиляторе ничего не изменилось с давних времен.

                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0653 ]   [ 16 queries used ]   [ Generated: 15.11.25, 22:51 GMT ]