gpt4 book ai didi

delphi - 如何修复程序循环引用?

转载 作者:行者123 更新时间:2023-12-03 14:46:41 24 4
gpt4 key购买 nike

我是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com