【问题标题】:Parameter Passing an Array of Type in Delphi在 Delphi 中传递类型数组的参数
【发布时间】:2011-06-27 06:48:54
【问题描述】:

我正在尝试将一个数组从一个类传递到我在 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

谁能帮忙?

【问题讨论】:

  • 记录类型声明表示记录,对吧?因此,您从 DBMS 读取数据,将其存储在记录中并尝试传递动态记录数组。您还应该提供更多代码,例如 ScoutArray 的类型。这是因为 TScoutArrayarray of TScout 在 Pascal/Delphi 中是不同的类型。
  • 我做 TScoutArray 是因为我读到你不能只从一个类中传递一个数组,你必须创建自己的数据类型,但它仍然不起作用,所以我在这里问跨度>
  • 如果您找到了答案,您应该将其标记为已接受,或者如果我们不理解,请提供更多详细信息。
  • @David Heffernan 对此表示歉意。现在标记答案。感谢您以我容易理解的方式快速回答。

标签: arrays delphi class types


【解决方案1】:

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

你需要做的是:

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

【讨论】:

  • 或将类型声明添加到第三单元C的接口部分,并将C包含在A和B的USES子句中。
【解决方案2】:

走错路

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

这行不通。 array of TScoutTScoutArray,后者是 SendRecords 返回的内容,在 Delphi/Pascal 中是不同的类型。

正确的方式

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

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2020-11-12
    • 2023-03-06
    相关资源
    最近更新 更多