Ошибка proc не объявлен в типе b

Ошибка Program142.pas(7) : proc не объявлен в типе b

  type
  b = class;
  a = class 
    function proc(): b;
    begin
      //new 
      writeln(result.proc); 
    end; 
  end;
  b = class 
  public 
    function proc(): a;
    begin
    end; 
  end;

begin
end.
type
  b = class;
  a = class
    
    function proc(): b;
  
  end;
  b = class
  
    public function proc(): a;
    begin
    end; 
  
  end;

function a.proc(): b;
begin
  //new 
  writeln(result.proc); 
end;

begin
end.

Какова причина ошибки?

b.proc должно быть объявлено до того как использовано

А вообще правильно делать так:

unit some_name;

interface

type
  a = class;
  b = class;

  a = class
    
    public function proc(): b;
  
  end;
  b = class
    
    public function proc(): a;
  
  end;

implementation

function a.proc(): b;
begin
  //new 
  writeln(result.proc); 
end;

function b.proc(): b;
begin
  
end;

end. 

“Правильно делать так” - не самое лучшее решение. … Удалено администратором

Пользователю VladislavMoldovan - предупреждение за некорректное поведение на форуме. В следующий раз забаним

Это не баг и вам уже выше об этом написали. В паскале все имена должны описываться до использования. Исключение: методы класса, которые реализуются прямо в описании класса. А наезды по поводу отсутствия тестирования мягко говоря необоснованные. Все тесты есть в папке TestSuite и прогоняются перед каждым коммитом.

1 лайк

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

1 лайк

А теперь представим: обнаружится новая ошибка во время решения олимпиадой задачи. Подумайте об этом.

Пока что ошибок мы от вас не увидели.

1 лайк
  1. Почему при попытке переименовать TFunction получаю:

    TFunction = function(TFunction ?

    type TFunction = function(x: real): real;

    function Integrate(a, b: real; c: integer; func: TFunction): real; begin var s := (b - a) / c; for var i := 0 to c - 1 do Result += Abs(func(a + i * s)); Result *= s; end;

    begin Writeln(Integrate(-1, 1, 100, Sin)); end.

Прошу исправить этот баг. Мешает работать. И еще, когда вставляешь код иногда сворачивание кода не работает. Только после внесения какого либо изменения начинает работать. Кстати, почему Intellisence плохо работает? Иногда вообще не работает даже на однострочных программах.

Если у вас есть аккаунт на гитхабе, постите баги в issues (один баг - один issue). Здесь они затеряются и не будут исправлены.

1 лайк

Будет время, оставлю пост.