Delphi 2007变种类型初始化

时间:2011-06-14 09:50:39

标签: 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 =  
 (  
  (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编译时错误,即无法初始化此类型。如何防止此错误?或者我们可以提供替代解决方案等。请协助......

4 个答案:

答案 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)

documentation州:

  

文件类型(包括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.

解决方案是使用赋值语句初始化一个普通变量。