|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
ysai (ysai) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2019/5/17 10:31:43 |
标题: |
|
加入我的收藏 |
楼主: |
procedure f(OnEvent: TNotifyEvent); overload; begin end;
procedure f(); overload; //不重载就没问题 begin end;
var event : TNotifyEvent; begin event := nil; f(event); f(nil); //编译出错 end;
----------------------------------------------
- |
作者: |
go_on (go_on) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2019/5/17 13:02:15 |
1楼: |
没delphi7 你试验一下f()
----------------------------------------------
-
|
作者: |
|
2019/5/17 16:28:05 |
2楼: |
f(nil); //编译出错
nil是值,不是TNotifyEvent属性。
----------------------------------------------
程序在于业务、流程、思想、风格。
|
作者: |
|
2019/5/17 17:17:56 |
3楼: |
同意楼上,你加了overload,那么编译时检查规则有些不同,其实你这种情况有几种解决方法: 1、不要overload,改成一个函数,用带默认值的形式: procedure f(OnEvent: TNotifyEvent = nil); 2、调用时如果不是变量,则转换一下类型,比如: f(TNotifyEvent(nil));
注:我在XE中测试的,出现类似的问题。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
ysai (ysai) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2019/5/18 10:02:48 |
4楼: |
to 2楼: 没重载的情况下,f(nil)可以
to3楼: 我只是简化了,实际参数可能很多,只要有事件参数并重载就会有这个问题 另外TNotifyEvent(nil)是编译通不过的
----------------------------------------------
-
|
作者: |
ysai (ysai) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2019/5/18 10:03:45 |
5楼: |
而且,这个问题在高版本下是不会出现的,应该就是个bug
----------------------------------------------
-
|
作者: |
|
2019/5/18 11:40:56 |
6楼: |
d7不重载也一样出错。
此帖子包含附件:
大小:50.4K |
----------------------------------------------
--
|
作者: |
|
2019/5/18 13:07:14 |
7楼: |
TNotifyEvent又不是指针。 是TMethod的结构体。 用NIL当然会出错。
----------------------------------------------
武稀松http://www.raysoftware.cn
|
作者: |
|
2019/5/18 18:36:38 |
8楼: |
楼主这个f(nil)在不同的Delphi版本中可能会有不同的结果,新版的Delphi应该都能编译了。这种情况只能尽量少用overload吧。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
ysai (ysai) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2019/5/21 11:36:50 |
9楼: |
@bahamut8348 (leonna) 你没把第一个函数的overload去掉,去掉是可以编译通过的
@wr960204 (武稀松) TMethod也是可以传nil的,只是在D7重载情况下出错
----------------------------------------------
-
|
|