在Delphi 2009中编译OmniThreadLibrary-3.03b时出错...
错误是:
[DCC错误] GpStuff.pas(332):E2003未声明的标识符:' GetAsAnsiString'
[DCC错误] GpStuff.pas(332):E2003未声明的标识符:' GetSize'
[DCC错误] GpStuff.pas(332):E2003未声明的标识符:' SetAsAnsiString'
[DCC错误] GpStuff.pas(332):E2003未声明的标识符:' GetValue'
[DCC致命错误] OmniThreadLibraryRuntime2009.dpk(54):F2063无法编译使用过的单位' .. \ src \ GpStuff.pas'
任何人都知道为什么它会在Delphi 2009中提示所有上述错误???
答案 0 :(得分:1)
在我看来,它就像Delphi 2009中的编译器错误。TGpBuffer
中触发编译器警告的未声明标识符具有strict protected
可见性。代码如下所示:
type
TGpBuffer = class(TInterfacedObject, IGpBuffer)
strict private
FData: TMemoryStream;
strict protected
function GetAsAnsiString: AnsiString; inline;
function GetSize: integer; inline;
function GetValue: pointer; inline;
procedure SetAsAnsiString(const value: AnsiString);
public
constructor Create; overload;
constructor Create(data: pointer; size: integer); overload;
destructor Destroy; override;
procedure Add(b: byte); overload; inline;
procedure Add(ch: AnsiChar); overload; inline;
procedure Allocate(size: integer); inline;
procedure Assign(data: pointer; size: integer); inline;
procedure Clear; inline;
function IsEmpty: boolean; inline;
property AsAnsiString: AnsiString read GetAsAnsiString write SetAsAnsiString;
property Size: integer read GetSize;
property Value: pointer read GetValue;
end; { TGpBuffer }
错误发生在属性声明中,所有声明都引用strict protected
getter和setter。这必须是编译器错误。一个类如何声明一个标识符而不能看到它?该代码在Delphi 2010中编译,因此我只能相信这是Delphi 2009中的编译器错误,可能更早(在Delphi 2005中添加了strict private
和strict protected
)。
我建议您将strict protected
更改为protected
并查看代码是否已编译。 GpLists
单位会遇到同样的问题。如果确实存在问题,请在OTL Google Code网站上提交错误报告。
最后,我建议您从版本控制中获取最新版本,而不是使用固定的ZIP文件下载。
更新:Primož已经对针对该bug的repo进行了更改。