我是 Delphi 编程领域的新手,在控制台应用程序的过程中调用过程时遇到问题。
我的简单应用程序是通过 Windows 上的 telnet 服务器运行的项目库存。 我使用旧的 thinkpad 作为运行 Linux 和 telnet 客户端的瘦客户端。
使用 Delphi XE,我遇到了先有鸡还是先有蛋的情况。
我得到addscreen未声明的标识符...它已声明但在主屏幕下! 如果我将 addscreen 过程放在主屏幕上,则 addscreen 过程中对主屏幕的任何调用都会导致错误未声明的标识符主屏幕!
简单来说,如何让程序在程序中处处被调用?
我尝试过接口(interface)和实现,但它在控制台应用程序中无效!
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, windows, messages, Console in 'Console.pas';
procedure mainscreen;
var
choice: string;
begin
clrscr;
writeln(' ------------------------------------------------------------------------------------------------------------------------------');
writeln(' | Inventory Management 0.1 ALPHA |');
writeln(' ------------------------------------------------------------------------------------------------------------------------------');
writeln('');
writeln('');
writeln('');
writeln('');
writeln('');
writeln(' Make a choice: Add(a), Remove(r), Edit(e), Backup Database(bd), Mass Add(ma), Mass Remove(mr)');
writeln('?:');
readln(choice);
if choice = 'a' then
addscreen
else
mainscreen;
end;
procedure addscreen;
var
choice: string;
begin
clrscr;
writeln(' ------------------------------------------------------------------------------------------------------------------------------');
writeln(' | Add an Item |');
writeln(' ------------------------------------------------------------------------------------------------------------------------------');
writeln('');
writeln('');
writeln('');
writeln(' Not yet ready!');
writeln(' Press any key to return to the main menu...');
readln(choice);
mainscreen;
end;
begin
mainscreen;
textbackground(black);
textcolor(lightgray);
ExitProcess(0);
end.
非常感谢!
最佳答案
编译器从上到下遍历文件。当它需要处理对 addscreen
的调用时,您尚未声明 addscreen
。
由于您有循环引用(addscreen
调用 mainscreen
,反之亦然),因此您需要使用所谓的前向引用来打破它。在主屏幕
procedure addscreen; forward;
所以代码的组织应该如下所示:
procedure addscreen; forward;
procedure mainscreen;
begin
...
end;
procedure addscreen;
begin
...
end;
如果您没有循环引用,那么您可以简单地重新排序过程,以便在 mainscreen
之前声明 addscreen
。
关于delphi - 如何修复程序循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7786717/