Delphi 对';标志';德尔菲

Delphi 对';标志';德尔菲,delphi,compiler-errors,sign,Delphi,Compiler Errors,Sign,我试图将函数Sign()与双变量一起使用,但它保持不变 给我一个错误信息“调用‘sign’” 当尝试使用整数变量或任何变量时,也会发生这种情况 为什么会发生这种情况,如何解决 我使用的代码如下所示: var CB : double; SignCB : TValueSign; begin CB := Random(1000)-500; SignCB := Sign(CB); end; 您试图调用的符号函数无效。对于常用的数值类型,该函数实际上有多个重载版本 如果代码唯一可见的

我试图将函数Sign()与双变量一起使用,但它保持不变 给我一个错误信息“调用‘sign’”

当尝试使用整数变量或任何变量时,也会发生这种情况

为什么会发生这种情况,如何解决

我使用的代码如下所示:

var
  CB : double;
  SignCB : TValueSign;
begin
  CB := Random(1000)-500;
  SignCB := Sign(CB);  
end;

您试图调用的
符号
函数无效。对于常用的数值类型,该函数实际上有多个重载版本

如果代码唯一可见的
符号
数学
单元中的重载,则不会遇到该错误。唯一合理的结论是您定义了另一个名为Sign的函数,该函数发生冲突

一种解决方案是完全限定函数调用。调用
Math.Sign()
而不是
Sign()


也许更好的解决方案是更改
符号
函数的名称。通过使用与原始RTL函数相同的名称,您会要求将来出现混淆。我建议你采取后一种行动

请包含您的代码(以及相关的变量声明)。如果不包含代码,很难回答有关无法编译的代码的问题。(问题是编译器无法判断应该使用哪个版本的
符号,但在不查看代码的情况下很难告诉您如何修复它。)@KenWhite好的。代码包括在内!在这种情况下,
使用
可能更有用(或者没有)。某些单元包含
符号
,但不是您的意思
数学符号
,只需使用名称空间,如
数学符号(xy)
此代码在Delphi 2007中编译良好(我现在刚好打开了它)。我认为@bummi是对的,你是对的。我把它改成了数学。符号,现在它似乎起作用了。谢谢