Delphi Convert返回无效类型
我试图使用内置的Convert函数在delphi中执行最简单的转换 简单地把加仑转换成升 但是,delphi在转换单元上返回无效类型Delphi Convert返回无效类型,delphi,units-of-measurement,Delphi,Units Of Measurement,我试图使用内置的Convert函数在delphi中执行最简单的转换 简单地把加仑转换成升 但是,delphi在转换单元上返回无效类型 procedure TfrmMain.NumberBox1Change(Sender: TObject); var Result : Double; begin // Update label with result Result := Convert(30, vuUKGallons, vuLiters); lblAreaResult.Text :=
procedure TfrmMain.NumberBox1Change(Sender: TObject);
var
Result : Double;
begin
// Update label with result
Result := Convert(30, vuUKGallons, vuLiters);
lblAreaResult.Text := Result.ToString;
end;
加仑和升的形式与Tconv类型相同
vuUKGallons, vuLiters: TConvType;
但是,当我尝试执行代码时,delphi返回以下内容
First chance exception at $7603AB32. Exception class EConversionError with message 'Incompatible conversion types [Illegal type, Illegal type]'. Process UnitConverter.exe (13972)
在阅读Embarcadero的文档后,这应该是最简单的操作,以下操作应该可以正常工作。在这一点上,我不知道发生了什么
谁能给我指一下正确的方向吗
谢谢
我已经编辑了这篇文章,包含了完整的单元代码
unit frmConverter;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, FMX.ListBox, FMX.Layouts,
FMX.TabControl, FMX.MultiView, FMX.Objects, FMX.Edit, System.ImageList,
FMX.ImgList, System.Threading, ConvUtils, FMX.EditBox, FMX.NumberBox;
type
TfrmMain = class(TForm)
MultiView1: TMultiView;
TabControl1: TTabControl;
tabLength: TTabItem;
tabVolume: TTabItem;
tabPressure: TTabItem;
tabEnergy: TTabItem;
ListBox1: TListBox;
StyleBook1: TStyleBook;
tabMass: TTabItem;
tabTemp: TTabItem;
Panel1: TPanel;
Label3: TLabel;
Label4: TLabel;
cbAreaFrom: TComboBox;
Label5: TLabel;
cbAreaTo: TComboBox;
btnMaster: TButton;
Label6: TLabel;
Label1: TLabel;
Layout1: TLayout;
lblAreaResult: TLabel;
Image1: TImage;
ToolBar1: TToolBar;
Button1: TButton;
Image2: TImage;
Button2: TButton;
Image3: TImage;
Button3: TButton;
Image4: TImage;
Label2: TLabel;
Button4: TButton;
Image5: TImage;
Label9: TLabel;
Button5: TButton;
Image6: TImage;
Label10: TLabel;
Button6: TButton;
Image7: TImage;
Label11: TLabel;
Button7: TButton;
Image8: TImage;
Label12: TLabel;
Button8: TButton;
Image9: TImage;
Label13: TLabel;
NumberBox1: TNumberBox;
lblDebugConvFrom: TLabel;
lblDebugConvTo: TLabel;
procedure NumberBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
vuUKGallons, vuLiters: TConvType;
implementation
{$R *.fmx}
procedure TfrmMain.NumberBox1Change(Sender: TObject);
var
Result : Double;
begin
// Update label with result
Result := Convert(30, vuUKGallons, vuLiters);
lblAreaResult.Text := Result.ToString;
end;
end.
您的程序必须修改
vukgallons
和vuLiters
的值,或者使用不同的值。该计划:
{$APPTYPE CONSOLE}
uses
System.StdConvs,
System.ConvUtils;
begin
Writeln(Convert(30, vuUKGallons, vuLiters));
Readln;
end.
{$APPTYPE CONSOLE}
uses
System.StdConvs,
System.ConvUtils;
begin
vuUKGallons := 0;
vuLiters := 0;
Writeln(Convert(30, vuUKGallons, vuLiters));
end.
{$APPTYPE CONSOLE}
uses
System.StdConvs,
System.ConvUtils;
var
vuUKGallons, vuLiters: Word;
begin
Writeln(Convert(30, vuUKGallons, vuLiters));
end.
输出1.36382700000000E+0002
但是这个节目:
{$APPTYPE CONSOLE}
uses
System.StdConvs,
System.ConvUtils;
begin
Writeln(Convert(30, vuUKGallons, vuLiters));
Readln;
end.
{$APPTYPE CONSOLE}
uses
System.StdConvs,
System.ConvUtils;
begin
vuUKGallons := 0;
vuLiters := 0;
Writeln(Convert(30, vuUKGallons, vuLiters));
end.
{$APPTYPE CONSOLE}
uses
System.StdConvs,
System.ConvUtils;
var
vuUKGallons, vuLiters: Word;
begin
Writeln(Convert(30, vuUKGallons, vuLiters));
end.
引发了一个异常:
Incompatible conversion types [Illegal type, Illegal type]
必须使用System.StdConvs
单元中定义的vuXXX
变量
更新
看过完整的代码后,现在清楚发生了什么
- 您没有使用
单元系统.StdConvs
- 当您试图引用
和vukgallons
时,编译器告诉您不存在这样的符号vuLiters
- 您声明了新变量
和vukgallons
vuLiters
- 您的代码现在已编译,但
和vukgallons
的值不正确vuLiters
vukgallons
和vuLiters
的声明System.ConvUtils
添加到uses子句中也许,您已经声明了自己的
vukgallons
和vuLiters
元素或ypu的集合具有相同名称的全局变量。尝试显式设置以下方式声明TConvTypes
的单位:Result:=Convert(30,StdConvs.vuUKGallons,StdConvs.vuLiters)代码>我认为@Dima是对的。我自己就试过了,没有问题。顺便说一句,如果你给了我们一个完整的,我们可以肯定地告诉你。Iv'e刚刚更新了帖子,包括完整的单位代码。感谢Guys关注您的TConvType
并使用预定义的,在System.StdConvs
unit中声明的。@Revski,当添加一个最小的示例时,请排除所有GUI内容并提供一个控制台应用程序。谢谢David。现在我明白了。我现在就试试这个。我的错误只是将vuXXX单独声明。