【问题标题】:Compiler error creating TPair TArray编译器错误创建 TPair TArray
【发布时间】:2018-01-13 07:49:35
【问题描述】:
uses
  Generics.Collections, types, rtti, System.Generics.Collections;

procedure GimmePairArray(const APairArray: TArray<TPair<string, TValue>>);
begin

end;

procedure TForm2.FormCreate(Sender: TObject);
var
  _PairArray: TArray<TPair<string, TValue>>;
begin
  _PairArray := TArray <TPair<string, TValue>>.Create(TPair<'"reset changes"', TValue.From<Boolean>(True)>);
  GimmePairArray(_PairArray);
end;

导致编译器错误: [DCC 错误] Unit2.pas(38): E2003 未声明的标识符:'TPair' 我做错了什么? TPair 在 System.Generics.Collections 中声明,我的 Uses 中有它。

【问题讨论】:

    标签: arrays delphi generics delphi-xe2


    【解决方案1】:

    首先,编译器说TPair 不存在。尽管你相信否则编译器是正确的。 TPair&lt;K, V&gt; 存在,但不存在 TPair

    编译器确实会指出问题所在。如果您指出无法编译的程序行会很有帮助,但很清楚这段代码是问题所在:

    TPair<'"reset changes"', TValue.From<Boolean>(True)>
    

    这是一个语法错误。你的意思是:

    TPair<string, TValue>.Create('"reset changes"', TValue.From<Boolean>(True))
    

    编译器查看您的代码并尝试确定&lt; 是否是泛型类型表达式的一部分。因为&lt; 右侧的表达式不是类型,所以它得出的结论是 let is not 并且您的 &lt; 是小于比较运算符。当然,它会说TPair 不存在。它没有,如顶部所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多