我正在使用 Delphi 7。
这是我的基类。函数load_for_edit()应该返回一个字符串数组,听起来像它。问题并不特别在这里,而是更进一步。
...
type
TStringArray = array of string;
...
function load_for_edit(): TStringArray;
...
numberOfFields: integer;
...
function TBaseForm.load_for_edit(): TStringArray;
var
query: TADOQuery;
i: integer;
begin
query := TADOQuery.Create(self);
query.Connection := DataModule1.ADOConnection;
query.SQL.Add('CALL get_' + self.table_name + '_id(' + self.id + ')');
query.Open;
numberOfFields := query.Fields.Count;
SetLength(result, query.Fields.Count);
for i := 0 to query.Fields.Count - 1 do
result[i] := query.Fields[i].Value.AsString;
end;
接下来是作为基类后代的类,它试图从基类的load_for_edit()函数接收一个数组。
...
type
TStringArray = array of string;
...
procedure TPublisherEditForm.FormShow(Sender: TObject);
var
rec: TStringArray;
begin
inherited;
SetLength(rec, self.numberOfFields);
rec := load_for_edit(); // Compilation stops here
end;
但是,应用程序不会编译。Delphi 吐出这个错误信息:
Incompatible types
因此,这意味着函数load_for_edit()返回的数据类型与变量rec的数据类型不同,但是,从它们各自的类型声明部分可以看出,它们的声明绝对相同。我不知道这里发生了什么以及该怎么做。请帮我想出一个解决方案。