我正在尝试声明一个常量数组,用于验证输入对象持有的类型属性。但我做错了,请看下面的代码:
// 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编译时错误,即无法初始化此类型。如何防止此错误?或者我们可以提供替代解决方案等。请协助......
答案 0 :(得分:7)
对于这些(布尔,整数)和其他简单类型,您可以使用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;
答案 1 :(得分:3)
文件类型(包括Text类型)和Variant类型无法初始化,也就是说,您无法声明这些类型的类型化常量或初始化变量。
所以你的问题是你的变种记录成员。这意味着您需要一种不同的方法,您将不得不放弃使用常量数组。
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)
]);
答案 2 :(得分:0)
E2071:无法使用常量表达式初始化变体。
答案 3 :(得分:0)
表格D2007帮助: E2071:此类型无法初始化
文件类型(包括Text类型)和Variant类型无法初始化,也就是说,您无法声明这些类型的类型化常量或初始化变量。
program Produce;
var
V: Variant = 0;
begin
end.
//该示例尝试声明Variant类型的初始化变量,这是非法的。
program Solve;
var
V: Variant;
begin
V := 0;
end.
解决方案是使用赋值语句初始化一个普通变量。