当编译器看起来完全相同时,为什么会说实现“与先前的声明不同”?

如何解决当编译器看起来完全相同时,为什么会说实现“与先前的声明不同”?

| 我有两个单位, 第一个,我的界面:
use personas

interface

type
  Tllave = array[0..31] of byte;
  Tdatos = array of byte;

  ImyInterface = interface(IInterface)

    function nombre : string;
    function edad : integer;
    procedure resetear;
    function Proceso(datos : tdatos; cantidad : integer) : integer ;    
    procedure Iniciar(llave : Tllave);
  end;
第二单元,我的对象声明:
use militares

interface

uses personas;

type

  Tmilitares = Class(TInterfacedObject,ImyInterface )
    public
      function nombre : string;
      function edad : integer;
      procedure resetear;
      function Proceso(datos : Tdatos; cantidad : integer) : integer ;    
      procedure Iniciar(llave : Tllave);
    published
      constructor create;
  end;

implementation

function tmilitares.Proceso(datos : tdatos; cantidad : integer) : integer ; // getting error !!
begin
  // ....
end;


procedure tmilitares.Iniciar(llave : Tllave); // getting error!!
begin
  // ....
end;
我仅在\'proceso \'函数和\'iniciar \'过程中收到错误消息: 'Iniciar \'的声明与以前的声明不同 'Proceso \'的声明与以前的声明不同。 我注意到他们有数组参数。参数的类型在第一个单元中定义,如果我在第二个单元中定义了这些类型,则会遇到相同的错误,但是会在对象的声明中显示。我该如何编译?     

解决方法

您没有显示足够的代码,但是很明显,这是在接口部分中的
Tmilitares
声明与方法实现之间重新定义了令人反感的类型(
Tdatos
Tllave
)。该重新声明可以是您
use
的另一个单元的形式,也可以是
militares
单元的实现部分的形式。 找到其他声明,您将能够解决您的问题。 问题末尾的评论表明:   如果我在第二个单元中定义了这些类型,则会遇到相同的错误,但是会在类的声明中显示。 您尝试重新定义类型的事实表明存在理解问题。类型只需要声明一次。一旦定义了两次,您将拥有两种截然不同的不兼容类型。更糟糕的是,它们具有相同的名称!定义一次类型,然后通过“ 7”语句将其导入其他单元。     ,以下作品。没有没有匹配的先前声明。我怀疑您在声明iMyInterface.SomeProcedure(在我的示例中为unit1),其参数与在实现接口(在我的示例中为unit2)的类中显示的参数略有不同。请注意,任何实现ImyInterface的东西都必须实现全部。 单元1:
unit Unit1;


interface

type   
  Tllave = array[0..31] of byte;  

  Tdatos = array of byte;

  ImyInterface = interface(IInterface)

    function nombre : string;
    function edad : integer;
    procedure resetear;
    function Proceso(datos : tdatos; cantidad : integer) : integer ;
    procedure Iniciar(llave : Tllave);   end;

implementation


  //stuff.

end.
单元2:
unit Unit2;

interface

{$M+}

uses Unit1;

type

  Tmilitares = Class(TInterfacedObject,ImyInterface )
    public
      function nombre : string;
      function edad : integer;
      procedure resetear;
      function Proceso(datos : Tdatos; cantidad : integer) : integer ;    
      procedure Iniciar(llave : Tllave);
    published
      constructor create;
  end;

implementation


function Tmilitares.nombre: string;
begin

end;

function tmilitares.Proceso(datos : tdatos; cantidad : integer) : integer ; // no more error 
begin
  // ....
end;


constructor Tmilitares.create;
begin

end;

function Tmilitares.edad: integer;
begin

end;

procedure Tmilitares.resetear;
begin

end;

procedure tmilitares.Iniciar(llave : Tllave); // no more error.
begin
  // ....
end;

end.
    ,我将其作为答案添加在这里,因为这是一个非常相似的问题,但是我只是在一个看起来像这样的单元中遇到了这个问题:
unit Unit1;

interface
  uses Generics.Collections;

type
  TFoo = class
  end;

  TFooList = class(TObjectList<TFoo>)
    protected
      procedure Notify(const Item: TFoo; Action: TCollectionNotification); override;
  end;

implementation

uses Classes;

procedure TFooList.Notify(const Item: TFoo; Action: TCollectionNotification);
var
 sl : TStringList;
begin
  //
end;

end.
  [dcc32错误] Unit1.pas(20):E2037 \'Notify \'的声明与以前的声明不同   [dcc32错误] Unit1.pas(12):E2065不满意的转发或外部声明:\'TFooList.Notify \'   [dcc32致命错误] Project1.dpr(6):F2063无法编译使用的单元\'Unit1.pas \' 我花了比我想承认要花更长的时间
System.Classes :: TCollectionNotification = (cnAdded,cnExtracting,cnDeleting);
和一个:
System.Generics.Collections :: TCollectionNotification = (cnAdded,cnRemoved,cnExtracted);
课程是有条不紊地检查您的类型。类型标识符上的Ctrl + CLICK将带您进入编译器正在使用的类型的定义。要解决此问题,请重新组织
uses
子句或使用完全限定的类型名称。 当在我们自己的代码中出现复制类型名称的新手错误时,这已经足够糟糕了;而当Emba在其自己的RTL中使用类型名称进行复制时,这个问题就变得更加糟糕了。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-