Delphi的错误提示莫名其妙,把调试中碰到的一些错误和处理方法记录下来
我真服了Delphi了,真是笨到一定境界了.还说什么聪明的程序员用Delphi,我看是因为Delphi实在太笨了,所以才需要聪明的程序员来用,这不是浪费人才嘛.
---------------我说的
===========================================================
1: Unsatisfied forward or external declaration
出现在程序一开始的函数声明,
意思就是声明和定义不一样,可能就是因为在定义的时候的数据类型,参数个数等不同而引起的,不过最可能的原因是,在定义的时候,前面少了一个前缀
比如在TForm1中声明的函数,在定义的前面加一个"TForm1."的前缀就行了
2: Types of actual and formal var parameters must be identical
出现在调用函数的地方
意思可能是不能用指针传递,在函数定义的地方,前面加个var表示这个值会被改变,加个const表示这个值不会被改变
这个错误要注意一下对传入参数的定义和处理
3: Incompatible types
数据类型不匹配,这个错误是我最经常碰到的.Delphi的类型太乱了.
一般后面会有两个类型,比较一下就行了.不过有时候后面没有数据类型,这个时候一般是指针类型不匹配,比较一下也可以发现.
新增:Incompatible types: 'Integer' and 'Extended',某次调试的时候出现这个,我研究了半天也没研究出来为什么,最后发现原来是除法的问题,如果定义a是integer,那么除法如果用a/2那就会报这个错误.百度了一下,要改成a div 2才可以.我真服了Delphi了,笨到一定境界了.还说什么聪明的程序员用Delphi,我看是因为Delphi实在太笨了,所以才需要聪明的程序员来用,这不是浪费人才嘛.
4.调试的时候,timer控件的一些语句不能被执行到
如以下程序(其中i是全局变量,tmr1是时钟控件):
procedure TForm1.tmr1Timer(Sender: TObject);
begin
if i < 5 then
begin
Inc(i);
MessageBox(Handle, PChar(IntToStr(i)), '提示', MB_OK + MB_ICONINFORMATION + MB_TOPMOST);
Form1.Caption := Form1.Caption + IntToStr(i);
end;
Inc(i);//在i小于5的时候,这一句将不能被执行,大于5之后,这句就能执行到
end;
经过试验,有如下现象:
1. 仅发生在timer控件上,如果用循环语句,没此错误
2. 肯定是MessageBox函数引起的,如果不用MessageBox函数,也不会出现
3. 如果提高timer控件的interval,然后在弹出提示的时候,及时在下次timer控件被启用的时候点击确定,则这种现象也不会出现
4. 无论何时,点击了弹出的提示框,那么后面的语句会被执行一次
原因也可以大概推测的出,就是MessageBox并不停止timer的计时,如果没有点击提示框的确定,则函数不会向下执行,但是下一次timer事件又会发生,这样就会出现连续的弹出提示框,而如果点击的一个提示框,则后面的语句会被执行,就好像MessageBox使线程被暂时挂起一样,等到点击了确定,这个线程才被执行.(难道真的是传说中的多线程)