如何在过程、函数中定义结构数组?(请帮帮忙) ( 积分: 30 )

  • 主题发起人 主题发起人 ppv
  • 开始时间 开始时间
P

ppv

Unregistered / Unconfirmed
GUEST, unregistred user!
type
PC_DataPkt = record
PCID:ARRAY [0..3] of byte;
OrderID:ARRAY [0..7] of byte;
EndTime:ARRAY [0..5] of byte;
end;
function PCData(DataCount:integer;Temp_PC_DataPkt:array [0..7] of PC_DataPkt):integer;
--------------------------------------
这里却报错,'OF' expected but '[' found
请高手帮帮忙看看。
 
type
PC_DataPkt = record
PCID:ARRAY [0..3] of byte;
OrderID:ARRAY [0..7] of byte;
EndTime:ARRAY [0..5] of byte;
end;
function PCData(DataCount:integer;Temp_PC_DataPkt:array [0..7] of PC_DataPkt):integer;
--------------------------------------
这里却报错,'OF' expected but '[' found
请高手帮帮忙看看。
 
type
PC_DataPkt = record
PCID:ARRAY [0..3] of byte;
OrderID:ARRAY [0..7] of byte;
EndTime:ARRAY [0..5] of byte;
MyAry:array [0..7] of PC_DataPkt
end;


function PCData(DataCount:integer;Temp_PC_DataPkt:MyAry):integer;
 
也就是这个问题!
function pcdata(tempstr:array[0..7] of char):integer;
这个也是出错
 
在函数中只能使用开放式数组,或事先定义好数组类型直接作为函数的形参
 
定義成全局的吧
 
To FlashDance:
系统报错,认为数组定义还没有结束.
 
function pcdata(tempstr:array of char):integer
要设置大小 SetLength(tempstr)
 
用以下的方式在函数中使用数组:
一:在函数中使用开放式数组
二:事先定义好数组类型直接作为函数的形参
 
一个例了
//计算数据集所要汇总的字段
//Example: var Result: array[0..1] of double;
//if CalcSumByField(DataSet, ['QTY', 'ORGAMT'], Result) then
function CalcSumByField(DataSet: TDataSet
FieldName: array of string;
var resSum: array of double): Boolean;
var
BookMark: TBookMark;
I: Integer;
begin
Result := false;
if not DataSet.Active then Exit;
if DataSet.IsEmpty then Exit;
if High(resSum) <> High(FieldName) then Exit
//如果数组参数不等就退出
for I := Low(resSum) to High(resSum) do //初始化结果数组为0;
resSum := 0;

for I := Low(FieldName) to High(FieldName) do //检查字段是否可以计算;
if DataSet.FindField(FieldName) = nil then
raise Exception.Create('没有找到字段名:' + FieldName)
else if not (DataSet.FieldByName(FieldName).DataType in [ftSmallint, ftInteger,
ftFloat, ftCurrency, ftBCD, ftWord, ftBytes]) then
raise Exception.Create('字段:' + FieldName + ' 是不能计算的字段' );

BookMark := DataSet.GetBookMark;
try
DataSet.DisableControls;
DataSet.First;
while not DataSet.Eof do
begin
for I := Low(resSum) to High(resSum) do //计算字段值写入数组
resSum := resSum + DataSet.FieldByName(FieldName).AsFloat;
DataSet.Next;
end;
Result := true;
if BookMark <> nil then
begin
DataSet.GotoBookmark(BookMark);
DataSet.FreeBookmark(BookMark);
end;
DataSet.EnableControls;
except
Result := false;
if BookMark <> nil then
DataSet.FreeBookmark(BookMark);
DataSet.DisableControls;
end;
end;
 
多人接受答案了。
 
后退
顶部