Arrays Delphi中传递类型数组的参数

Arrays Delphi中传递类型数组的参数,arrays,delphi,class,types,Arrays,Delphi,Class,Types,我试图将一个数组从类中传递到我的Delphi主程序中。我在数据类型方面遇到了一些问题,花了一个小时浏览网页,却没有发现任何帮助。听起来有点奇怪,但答案越复杂,对大学项目来说就越好 我有一个连接到SQL的类,它将SQL查询读入一个记录类型声明数组中。如果现在有点混乱,请原谅: Type TScout = Record SNum, FName, SName, Gender, Address, HomeNum, MobNum, SEmail, STel, Hikes, Nights, Med, Die

我试图将一个数组从类中传递到我的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;不工作,因为在另一方面,我有相同的两种类型TScout和TScoutArray声明完全相同,我调用函数:

  ScoutArray := ScoutSQL.SendRecords;
我得到:

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

有人能帮忙吗?

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

您需要做的是:

在接口部分声明一个单元的类型,比如说,只声明一个单元A。 在另一个unit B中,假设想要使用这些类型,则将unit A添加到uses子句中。
我怀疑您的问题在于您在单独的单元中声明了两次这些类型。这样做会导致不同的、不兼容的类型

您需要做的是:

在接口部分声明一个单元的类型,比如说,只声明一个单元A。 在另一个unit B中,假设想要使用这些类型,则将unit A添加到uses子句中。 走错路 这行不通。TScout数组和TScoutArray(后者是SendRecords返回的内容)在Delphi/Pascal中是不同的类型

正道 走错路 这行不通。TScout数组和TScoutArray(后者是SendRecords返回的内容)在Delphi/Pascal中是不同的类型

正道
记录类型声明意味着记录,对吗?因此,您从DBMS读取数据,将其存储在记录中,并尝试传递一个动态记录数组。您还应该提供更多的代码,比如ScoutArray类型。这是因为TScoutArray和TScout的数组在Pascal/Delphi中是不同的类型。我创建TScoutArray是因为我读到你不能只从类中传递数组,你必须创建自己的数据类型,但它仍然不起作用,所以我在这里问你,如果你找到了答案,你应该把它标记为接受,或者如果我们不理解,你应该提供更多的细节。@David Heffernan为此道歉。现在是答案。感谢您以我能理解的方式快速回答。记录类型声明意味着记录,对吗?因此,您从DBMS读取数据,将其存储在记录中,并尝试传递一个动态记录数组。您还应该提供更多的代码,比如ScoutArray类型。这是因为TScoutArray和TScout的数组在Pascal/Delphi中是不同的类型。我创建TScoutArray是因为我读到你不能只从类中传递数组,你必须创建自己的数据类型,但它仍然不起作用,所以我在这里问你,如果你找到了答案,你应该把它标记为接受,或者如果我们不理解,你应该提供更多的细节。@David Heffernan为此道歉。现在是答案。感谢您以我能轻松理解的方式快速回答。或者将类型声明添加到第三单元C的接口部分,并在a和Bs USES子句中包含C。或者将类型声明添加到第三单元C的接口部分,并在a和Bs USES子句中包含C。
var
  badArray: array of TScout;
begin
  badArray := ScoutSQL.SendRecords;
var
  niceArray: TScoutArray;
begin
  niceArray := ScoutSQL.SendRecords;