参数在Delphi中传递类型数组

时间:2011-02-14 23:40:05

标签: arrays delphi class types

我正在尝试将类中的数组传递到Delphi中的主程序中。我在数据类型方面遇到了一些麻烦,一小时搜索网络没有找到任何帮助我。这听起来有点奇怪,但答案越复杂越好(这是大学项目)。

我有一个连接到SQL的类,它将SQL查询读入一个记录类型声明的数组(对不起,如果它现在有点乱):

Type TScout = Record
SNum, FName, SName, Gender, Address, HomeNum, MobNum,
SEmail, STel, Hikes, Nights, Med, Diet : String;
DoB, DoJ : String;
End;

Type TScoutArray = Array of TScout;

Type TScoutSQL = Class
Public
  Procedure InitSQL;
  Procedure GetRecords;
  Function SendRecords : TScoutArray;
Private
  ScoutsArray : TScoutArray;
  ScoutConnection : TSQLConnection;
  ScoutQuery : TSQLQuery;
End;

所以整个“函数SendRecords:TScoutArray;”不起作用,因为在另一边我有相同的2种类型(TScout和TScoutArray)声明完全相同,我调用函数:

  ScoutArray := ScoutSQL.SendRecords;

我得到了:

[Error] MembersUnit.pas(51): Incompatible types

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

我怀疑你的问题是你在不同的单位中两次声明这些类型。这样做会导致不同的,不兼容的类型。

您需要做的是:

  • 在接口部分声明仅一个单元的类型(单位A,比方说)。
  • 在想要使用这些类型的另一个单元(单位B,比如说)中,您将单元A添加到uses子句中。

答案 1 :(得分:2)

错误的方式

var
  badArray: array of TScout;
begin
  badArray := ScoutSQL.SendRecords;

这不起作用。 array of TScoutTScoutArray,后者是SendRecords返回的,是Delphi / Pascal中的不同类型。

正确的方式

var
  niceArray: TScoutArray;
begin
  niceArray := ScoutSQL.SendRecords;