На главную Наши проекты:
Журнал   ·   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_
  
> перегрузка операторов, почему не работает?
    Есть рекорд с перегруженными операторами сравнения и умножения. только почему то сравнение - не компилируется, а умножение компилируется.
    Вопрос: почему ??
    Компирирую в Delphi 10.2 (Токио) если у кого нить есть рио, проверьте там тоже пожлста.

    ExpandedWrap disabled
      type
        TMyRecord2 = record
        public
          class operator Equal(const a: TMyRecord2; const b: array of Integer): boolean;
          class operator Multiply(const a: TMyRecord2; const b: array of Integer): TMyRecord2;
        end;
       
      class operator TMyRecord2.Equal(const a: TMyRecord2; const b: array of Integer): boolean;
      begin
        Result := True;
      end;
       
      class operator TMyRecord2.Multiply(const a: TMyRecord2; const b: array of Integer): TMyRecord2;
      begin
        Result := a;
      end;
       
      procedure TForm1.FormClick(Sender: TObject);
      var
        R: TMyRecord2;
        B: boolean;
      begin
        B := R = [10]; // Почему эта строка не компилируются
        R := R * [10]; // а это компилируется
      end;


    updated: убрал лишний код не влияющий на проблему
    Сообщение отредактировано: jack128 -
      компилятор почему-то считает, что [10] - множество а не массив :wacko: (замени на [1000])
        Угу, похоже. Заменил Integer на Double - ошибка поменялась на [dcc32 Error] Project1.dpr(37): E2001 Ordinal type required
        При этом умножение - всё так же работает.


        ExpandedWrap disabled
          program Project1;
           
          {$APPTYPE CONSOLE}
           
          {$R *.res}
           
          uses
            System.SysUtils;
           
          type
            TMyRecord2 = record
            public
              class operator Equal(const a: TMyRecord2; const b: array of Double): boolean;
              class operator Multiply(const a: TMyRecord2; const b: array of Double): TMyRecord2;
            end;
           
          class operator TMyRecord2.Equal(const a: TMyRecord2; const b: array of Double): boolean;
          begin
            Result := True;
          end;
           
          class operator TMyRecord2.Multiply(const a: TMyRecord2; const b: array of Double): TMyRecord2;
          begin
            Result := a;
          end;
           
          var
            b: boolean;
            r: TMyRecord2;
            i: Double;
          begin
            try
              r := r * [10.0]; // this line is compiled
              b := r = [10.0]; // this line is not compiled
            except
              on E: Exception do
                Writeln(E.ClassName, ': ', E.Message);
            end;
          end.



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


        Рейтинг@Mail.ru
        [ Script execution time: 0,0240 ]   [ 16 queries used ]   [ Generated: 23.04.24, 13:05 GMT ]