在Delphi中,不兼容类型:'动态数组'和'字符串数组'

4

我有一个类如下:

Programmer = Class(Worker)
private
  // Some code here
  programmingLanguages: array of String;
  numOfProgrammingLanguages: integer;
public
  // Some code here
  procedure SetProgrammingLanguages(newLanguages: array of String);
  function GetNumOfProgrammingLanguages(languages: array of string) : integer;
end;

当我为SetProgrammingLanguages方法编写以下代码时,出现了错误:

procedure Programmer.SetProgrammingLanguages(newLanguages: array of String);
begin
  programmingLanguages := newLanguages;
end;

不兼容的类型:'动态数组' 和 '字符串数组'

我该如何解决这个问题?


请阅读我的关于开放数组参数的文章。它可能会有所帮助。 - Rudy Velthuis
1个回答

4
解决方案是首先声明一个新类型,比如 TProgrammingLanguages = array of string;。然后在类声明和方法参数中使用该类型。
你现在编写的方法参数是一个 开放数组参数,与你用于 programminglanguages 字段的动态数组类型不同。
要了解有关 开放数组参数 的信息,请参阅文档

谢谢,这对我有效。 - Alexander Seredenko
这是一个冒险的解决方案。现在你将拥有对同一对象的两个引用。提问者可能更喜欢复制语义。 - David Heffernan
@DavidHeffernan,你能提出更好的解决方案吗? - Alexander Seredenko
3
这取决于您想要实现什么。您可能希望引用另一个参考,知道将值分配给programmingLanguages[i]将修改调用者具有引用的对象。或者您可能希望复制一份。您可能更喜欢使用开放数组,因为它在传递内容方面提供了更大的灵活性。如果您这样做,那么您应该将参数声明为“const”,以避免进行不必要的复制。我们可以告诉您编译器为什么会报告错误,但是我诚实地认为我们无法建议您的代码应该是什么。没有详细说明问题是什么。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接