PASCAL - 从另一个函数调用过程
PASCAL - Call a procedure from another function
我有这个问题。
我在这个函数的末尾:
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" 的过程。因此,在主程序代码中,我可以调用过程 "Submenu()"。但是当我在上面的函数中时,它不会编译我的代码。它说 "identifier not found"。但是,在完成此功能后,它需要做的最后一件事就是进入子菜单。我真的试图不在主程序中建立一个无限循环,只是为了不让程序结束。最好的方法是什么?
哦,我知道,如果我在其他功能之前启动子菜单功能,它就可以工作。但是这两个函数相互调用,所以两者都不能相互叠加,因为总会有一个,那是行不通的...
问候。
那么你需要一个前向声明:
FUNCTION ToString(Liste : Pokemon) : String; FORWARD;
FUNCTION Submenu();
BEGIN
..
ToString(Liste);
..
END;
FUNCTION ToString(Liste : Pokemon) : String;
BEGIN
// real implementation tostring
..
Submenu();
..
END;
注意带有FORWARD
的声明
我有这个问题。 我在这个函数的末尾:
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" 的过程。因此,在主程序代码中,我可以调用过程 "Submenu()"。但是当我在上面的函数中时,它不会编译我的代码。它说 "identifier not found"。但是,在完成此功能后,它需要做的最后一件事就是进入子菜单。我真的试图不在主程序中建立一个无限循环,只是为了不让程序结束。最好的方法是什么?
哦,我知道,如果我在其他功能之前启动子菜单功能,它就可以工作。但是这两个函数相互调用,所以两者都不能相互叠加,因为总会有一个,那是行不通的...
问候。
那么你需要一个前向声明:
FUNCTION ToString(Liste : Pokemon) : String; FORWARD;
FUNCTION Submenu();
BEGIN
..
ToString(Liste);
..
END;
FUNCTION ToString(Liste : Pokemon) : String;
BEGIN
// real implementation tostring
..
Submenu();
..
END;
注意带有FORWARD
的声明