Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi [dcc32致命错误]:F2084内部错误:NC1921_Delphi_Dcc32 - Fatal编程技术网

Delphi [dcc32致命错误]:F2084内部错误:NC1921

Delphi [dcc32致命错误]:F2084内部错误:NC1921,delphi,dcc32,Delphi,Dcc32,我试图在Delphi Rio中编译以下代码: unit untObjectHelper; interface uses SysUtils; type TObjectHelper = class(TInterfacedObject) public class procedure Clone(const objOrigem: TObject; const objDestino: TObject); end; implementation uses

我试图在Delphi Rio中编译以下代码:

unit untObjectHelper;

interface

uses
   SysUtils;

type
   TObjectHelper = class(TInterfacedObject)
   public
      class procedure Clone(const objOrigem: TObject; const objDestino: TObject);
   end;

implementation

uses
   System.Rtti;

{ TObjectHelper }

class procedure TObjectHelper.Clone(const objOrigem,
   objDestino: TObject);
begin
   if not Assigned(objOrigem) then
      Exit;

   if not Assigned(objDestino) then
      Exit;

   if objOrigem.ClassType <> objDestino.ClassType then
      Exit;

   var contexto := TRttiContext.Create;
   try
      var tipo := contexto.GetType(objOrigem.ClassType);
      var campos := tipo.GetFields();
   finally
      contexto.Free;
   end;
end;

end.
版本:Embarcadero®Delphi 10.3版本26.0.33219.4899


我没有找到这个错误的参考,有人能帮我吗?非常感谢

问题在于类型推断,感谢Rudy Velthuis的提示

unit untObjectHelper;

interface

uses
   SysUtils;

type
   TObjectHelper = class(TInterfacedObject)
   public
      class procedure Clone(const objOrigem: TObject; const objDestino: TObject);
   end;

implementation

uses
   System.Rtti;

{ TObjectHelper }

class procedure TObjectHelper.Clone(const objOrigem,
   objDestino: TObject);
begin
   if not Assigned(objOrigem) then
      Exit;

   if not Assigned(objDestino) then
      Exit;

   if objOrigem.ClassType <> objDestino.ClassType then
      Exit;

   var contexto := TRttiContext.Create;
   try
      var tipo := contexto.GetType(objOrigem.ClassType);
      var campos: TArray<TRttiField> := tipo.GetFields();
   finally
      contexto.Free;
   end;
end;

end.
unitunobjecthelper;
接口
使用
SysUtils;
类型
TObjectHelper=类(TInterfacedObject)
公众的
类过程克隆(const objOrigem:TObject;const objDestino:TObject);
结束;
实施
使用
系统Rtti;
{TObjectHelper}
类过程TObjectHelper.Clone(const objOrigem,
对象:对象);
开始
如果未分配(objOrigem),则
出口
如果未分配(objDestino),则
出口
如果objOrigem.ClassType objDestino.ClassType,则
出口
var contexto:=TRttiContext.Create;
尝试
var tipo:=contexto.GetType(objOrigem.ClassType);
var campos:TArray:=tipo.GetFields();
最后
上下文自由;
结束;
结束;
结束。

看起来您应该向QC报告。引入内嵌变量并不奇怪。尝试预先声明该变量,或同时声明两者。可能是+RTTI的组合。我没有Rio,但在西雅图,您不能声明名为“Type”的变量。因此,我尝试将变量重命名为其他名称,或者使用“&Type”。@LURD,我修复了代码,是translator@JerryDodge您是正确的,在变量部分声明代码compiled@KenBourassa,我修复了代码。或者,您可以使用原始代码进行以下修改:
var campos:TArray:=tipo.GetFields()。问题不在于内联声明,问题在于类型推断,它不能正常工作。
unit untObjectHelper;

interface

uses
   SysUtils;

type
   TObjectHelper = class(TInterfacedObject)
   public
      class procedure Clone(const objOrigem: TObject; const objDestino: TObject);
   end;

implementation

uses
   System.Rtti;

{ TObjectHelper }

class procedure TObjectHelper.Clone(const objOrigem,
   objDestino: TObject);
begin
   if not Assigned(objOrigem) then
      Exit;

   if not Assigned(objDestino) then
      Exit;

   if objOrigem.ClassType <> objDestino.ClassType then
      Exit;

   var contexto := TRttiContext.Create;
   try
      var tipo := contexto.GetType(objOrigem.ClassType);
      var campos: TArray<TRttiField> := tipo.GetFields();
   finally
      contexto.Free;
   end;
end;

end.