Delphi2007变量类型初始化
我试图声明一个常量数组,用于验证输入对象持有的类型属性。但是我做了一些不正确的事情,请看下面的代码:Delphi2007变量类型初始化,delphi,delphi-2007,Delphi,Delphi 2007,我试图声明一个常量数组,用于验证输入对象持有的类型属性。但是我做了一些不正确的事情,请看下面的代码: // Record to hold Name-Value pair for checking entities TValues = record Name : WideString; Value : Variant; end; const coarrType1Properties : array[0..5] of TValues = ( (Nam
// Record to hold Name-Value pair for checking entities
TValues = record
Name : WideString;
Value : Variant;
end;
const
coarrType1Properties : array[0..5] of TValues =
(
(Name : 'HARDWARE'; Value : TRUE),
(Name : 'SOFTWARE'; Value : TRUE),
(Name : 'TAG'; Value : TRUE),
(Name : 'AUTHORIZED'; Value : TRUE),
(Name : 'ID'; Value : 700),
(Name : 'CODE'; Value : 0)
);
但我得到了类型值的delphi编译时错误,即该类型无法初始化。如何防止这种错误?或者我们可以有其他解决方案等。请协助 :变量不能用常量表达式初始化。表格D2007帮助:
E2071:无法初始化此类型
文件类型(包括类型文本),并且无法初始化类型变量,即不能声明这些类型的类型化常量或初始化变量
program Produce;
var
V: Variant = 0;
begin
end.
//该示例尝试声明Variant类型的初始化变量,这是非法的
program Solve;
var
V: Variant;
begin
V := 0;
end.
解决方案是使用赋值语句初始化正常变量。状态:
文件类型(包括类型文本),并且无法初始化类型变量,即不能声明这些类型的类型化常量或初始化变量
因此,您的问题在于您的变体记录成员。这意味着您需要一种不同的方法,必须放弃使用常量数组
function Values(const Name: WideString; const Value: Variant): TValues;
begin
Result.Name := Name;
Result.Value := Value;
end;
type
TValuesArray = array of TValues;
function ValuesArray(const Values: array of TValues): TValuesArray;
var
i: Integer;
begin
SetLength(Result, Length(Values));
for i := 0 to high(Result) do
Result[i] := Values[i];
end;
var
coarrType1Properties: TValuesArray;
initialization
coarrType1Properties := ValuesArray([
Values('HARDWARE', TRUE),
Values('SOFTWARE', TRUE),
Values('TAG', TRUE),
Values('AUTHORIZED', TRUE),
Values('ID', 700),
Values('CODE', 0)
]);
对于这些(布尔型、整数型)和其他简单类型,您可以使用TVarData
进行初始化,并将类型转换回Variant
:
type
TValues = record
Name: WideString;
Value: TVarData;
end;
const
coarrType1Properties : array[0..5] of TValues = (
(Name: 'HARDWARE'; Value: (VType: varBoolean; VBoolean: True)),
(Name: 'SOFTWARE'; Value: (VType: varBoolean; VBoolean: True)),
(Name: 'TAG'; Value: (VType: varBoolean; VBoolean: True)),
(Name: 'AUTHORIZED'; Value: (VType: varBoolean; VBoolean: True)),
(Name: 'ID'; Value: (VType: varInteger; VInteger: 700)),
(Name: 'CODE'; Value: (VType: varInteger; VInteger: 0))
);
procedure Test;
var
I: Integer;
begin
for I := Low(coarrType1Properties) to High(coarrType1Properties) do
Writeln(Format('coarrType1Properties[%d]: ''%s'', %s', [I, coarrType1Properties[I].Name, VarToStr(Variant(coarrType1Properties[I].Value))]));
end;
@大卫和GJ都给了你答案。我想指出的是,当你提问时,给出完整的实际错误信息要比说“我遇到了delphi编译时错误”要好得多。确切地知道你遇到了什么错误,可以更容易地帮助你得到答案。@Ken:谢谢……我以后会处理这些事情:)@谢谢David,错误已经过去了……不过我更喜欢TOndrej soln来处理我的问题。@Nains TOndrej解决方案给你留下了一个常量,但可读性稍差。我想这就是交易。顺便说一句,我的答案遵循了我经常使用的模式,我希望语言能够更好地支持它。您至少可以使用语言支持摆脱
ValuesArray
函数:coarrType1Properties:=TValuesArray.Create(值('HARDWARE',True),值('ID',700))代码>