加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 03:55:41 所属栏目:大数据 来源:网络整理
导读:我是Delphi编程领域的新手,我在控制台应用程序中调用过程时遇到问题. 我的简单应用程序是通过Windows上的telnet服务器运行的项目库存. 我使用旧的thinkpad作为我的瘦客户端运行linux和telnet客户端. 使用Delphi XE我遇到了鸡肉或鸡蛋的情况. 我得到了addscre
我是Delphi编程领域的新手,我在控制台应用程序中调用过程时遇到问题.

我的简单应用程序是通过Windows上的telnet服务器运行的项目库存.
我使用旧的thinkpad作为我的瘦客户端运行linux和telnet客户端.

使用Delphi XE我遇到了鸡肉或鸡蛋的情况.

我得到了addscreen未声明的标识符…它被声明但是在主屏幕下!
如果我把addscreen程序放在主屏幕上,那么在addscreen程序中对mainscreen的任何调用都会让我误认为是unclared标识主屏幕!

简单来说,如何让程序在程序中到处调用?

我已经尝试过接口和实现,但它在控制台应用程序中无效!

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;

如果您没有循环引用,那么您可以简单地重新排序过程,以便在主屏幕之前声明添加屏幕.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读