PASCAL - Вызов процедуры из другой функции

У меня есть эта проблема. Я в конце этой функции:

FUNCTION ToString(Liste : Pokemon) : String;
VAR
RES : STRING;
BEGIN

  ClrScr;
  TextBackground(Green);
  Writeln('DER POKEDEX:');
  Writeln;
  WHILE (Liste <> NIL) DO
     BEGIN
      RES :=  RES + Concat('#',IntToStr(Liste^.PkmnPos), ': ', Liste^.PkmnName, '. // ', IntToStr(Liste^.PkmnKG), ' kg', chr(13),chr(10),chr(13),chr(10));
      Liste := Liste^.Next;
    END;
    TextBackground(Black);
    ToString := Res;

END;

Теперь у меня есть процедура под названием «Подменю». Итак, в коде основной программы я могу просто вызвать процедуру "Подменю()". Но когда я в этих вышеперечисленных функциях, мой код не компилируется. Пишет "идентификатор не найден". Но после того, как я закончу с этой функцией, последнее, что ей нужно сделать, это войти в подменю. И я действительно стараюсь не создавать бесконечный цикл в основной программе только для того, чтобы программа не закончилась. Каков наилучший способ сделать это?

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

С уважением.


person user7285912    schedule 09.01.2017    source источник


Ответы (1)


Тогда вам нужна предварительная декларация:

  FUNCTION ToString(Liste : Pokemon) : String; FORWARD;

  FUNCTION Submenu(); 
  BEGIN
      ..
       ToString(Liste);
      ..
  END;

  FUNCTION ToString(Liste : Pokemon) : String; 
  BEGIN
     // real implementation tostring
     ..
     Submenu();
     ..
  END;

Обратите внимание на объявление с FORWARD.

person Marco van de Voort    schedule 09.01.2017
comment
СПАСИБО!! Работает отлично! - person user7285912; 09.01.2017