【问题标题】:PASCAL - Call a procedure from another functionPASCAL - 从另一个函数调用过程
【发布时间】:2017-05-23 21:20:06
【问题描述】:

我有这个问题。 我在这个函数的末尾:

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()”。但是当我在上述函数中时,它不会编译我的代码。它说“找不到标识符”。但是,在我完成此功能后,它需要做的最后一件事就是进入子菜单。而且我真的试图不在主程序中建立无限循环,只是为了不让程序结束。最好的方法是什么?

哦,我知道,如果我在其他功能之前启动子菜单功能,它会起作用。但是这两个函数相互调用,所以两者都不能相互叠加,因为总会有一个,这是行不通的......

问候。

【问题讨论】:

    标签: function call pascal procedures


    【解决方案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

    的声明

    【讨论】:

    • 谢谢!!完美运行!
    猜你喜欢
    • 2012-07-15
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多