【发布时间】:2012-12-19 15:23:37
【问题描述】:
以这个小示例类为例(不是我的真实代码,但它暴露了问题):
Convert = class(TObject)
public
class function ToString(value: Double): String; overload;
class function ToString(value: TDateTime): String; overload;
end;
在您尝试使用 Double 或 TDateTime 函数之前,它可以正常编译
在:
var
d: Double;
begin
d := 99.99;
ShowMessage(Convert.ToString(d));
您将收到此编译错误:对“ToString”的模糊重载调用。
问题归结为TDateTime 是Double 的一种类型
我的问题:您如何处理此类问题?
编辑 - 我不是在为给出的示例寻找解决方案
到目前为止,我已经找到了 3 个解决方案:
- 重命名 2 个函数之一
- 将“Dummy”参数添加到 2 个函数之一
- 把参数改成Var类型,缺点是不能再用常量调用这个函数
还有其他解决方案吗?
【问题讨论】:
-
我重命名了那些 DateTime 函数
-
@CosminPrund:重命名它们是不可能的(实际上我有 30 多个重载)
-
@whosrdaddy,然后发布暴露你问题的真实代码。
-
@LURD
ShowMessage( Convert.ToString( 99.99 ) );导致E2251编译器错误 -
@SirRufo,
Convert.ToString( Double(Variant(99.99)))工作。