Delphi E2037'的声明;ReadBytes';与以前的声明不同
错误所在代码的一部分:Delphi E2037'的声明;ReadBytes';与以前的声明不同,delphi,Delphi,错误所在代码的一部分: function ReadBytes(maxLen: integer): TBytes; virtual; ... uses sysutils, windows, SysConst, commutil; ... function TBasicBufferedStream.ReadBytes(maxLen: Integer): TBytes; begin if maxLen > 0 then begin
function ReadBytes(maxLen: integer): TBytes; virtual;
...
uses sysutils, windows, SysConst, commutil;
...
function TBasicBufferedStream.ReadBytes(maxLen: Integer): TBytes;
begin
if maxLen > 0 then
begin
if maxLen <= (fBufFill - fInBufPos) then
begin
SetLength(result, maxLen);
Move(fBuf[fInBufPos], result[0], maxLen);
inc(fInBufPos, maxLen);
end
else
begin
result := Peek(maxLen);
Skip(maxLen);
end;
end
else
result := nil;
end;
函数ReadBytes(maxLen:integer):TBytes;事实上的
...
使用sysutils、windows、SysConst、convertil;
...
函数TBasicBufferedStream.ReadBytes(maxLen:Integer):TBytes;
开始
如果maxLen>0,则
开始
如果maxLen这只是一个有根据的猜测,因为提供的代码是稀疏的。提供的代码给出了以下小提示:
使用声明包含后的代码示例中提供的
System.SysUtils
,定义t字节的单位
- 提供的用途在声明之后,因此必须有
t字节
具有与System.SysUtils不同的源代码
因此,在声明和实现部分,TBytes
很可能实际上并不是指同一类型。这可以通过将鼠标悬停在类型上来可视化。工具提示将告诉您编译器引用的确切类型
例如,我可以用两个小单位再现你的问题TBytes
是在System.SysUtils
中声明的,但我声明了另一个,就像在Unit3
中的Delphi 2009(见下文)中定义的一样:
unit Unit3;
interface
type
TBytes = array of Byte;
implementation
end.
当我现在创建一个如下所示的单元时,我混淆了来自两个不同单元的tbyte的用法,这两个单元不兼容:
unit Unit2;
interface
uses
Unit3;
function ReadBytes(maxLen: integer): TBytes;
implementation
uses
System.SysUtils;
function ReadBytes(maxLen: integer): TBytes;
begin
//
end;
end.
工具提示将显示的类型是type Unit3.TBytes:Byte数组
和type System.SysUtils.TBytes:System.array
因此,事实上,声明中我的函数的签名与实现中的签名不同
这可以通过以下方式解决:
- 检查使用的装置是否正确和必要,可以吗
摆脱引起歧义的那个
- 如果不可能用第一点来解决它,那么它是可能的
通过在前面加上前缀来显式地引用哪种类型
包含单位:
function ReadBytes(maxLen: integer): Unit3.TBytes;
我追溯查看了System.SysUtils.TBytes的历史,在Delphi 7中找不到它,但在Delphi 2009中,TBytes的定义如下:
考虑到这一点,我修改了我的代码示例,并重新表述了部分答案 你能显示错误信息吗compilation@MosabShaheen:[dcc32错误]bufstream.pas(261):E2037对“ReadBytes”的声明与以前的声明不同。错误说明了这一点。检查readBytes的声明,是否添加了内容,是否忘记了重载,是否覆盖?也许可以演示如何声明函数本身。此外,不同版本的delphi可能会有很大的不同。代码的第一行在什么上下文中?单元,类?你需要向我们展示真实的代码-重现你的问题的东西。我们不知道这里的背景,所以答案可能是很多。显示的答案是似是而非的猜测,但我们不需要猜测代码>以使用定义的type@NasreddineAbdelillahGalfout这基本上是检查所使用的单位是否正确和必要,你能消除造成歧义的单位吗?它在D7上工作,所以我猜这种情况是不可能的(我不确定TBytes是否是D7中System.SysUtils的一部分)@NasreddineAbdelillahGalfout泛型是在2009年引入的,当前TBytes的定义(至少回到XE2)是使用泛型。Delphi7至少没有使用相同的TBytes