我尝试调用MkDir时收到以下错误消息
[错误] DBaseReindexer.dpr(22):不明确的重载调用
MkDir
我已经尝试了以下的事情,他们都返回相同的错误.
MkDir('test');
var
Dir: String;
begin
Dir := 'test';
MkDir(Dir);
end;
const
Dir = 'test';
begin
MkDir(Dir);
end;
Run Code Online (Sandbox Code Playgroud)
从查看源代码,有一个带字符串的版本,以及带有PChar的版本.我不确定我的字符串在这两种类型之间是多么模糊.
重现错误的代码(来自评论):
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, System;
begin
MkDir('Test');
end.
Run Code Online (Sandbox Code Playgroud)
您的代码在空项目中编译良好:
program Project1;
procedure Test;
const
ConstStr = 'test';
var
VarStr: string;
begin
MkDir('Test');
MkDir(ConstStr);
MkDir(VarStr);
end;
begin
end.
Run Code Online (Sandbox Code Playgroud)
所以你的问题是代码中的其他地方你定义了一个不兼容的重载MkDir.比如这个程序:
program Project1;
procedure MkDir(const S: string); overload;
begin
end;
procedure Test;
const
ConstStr = 'test';
var
VarStr: string;
begin
MkDir('Test');
MkDir(ConstStr);
MkDir(VarStr);
end;
begin
end.
Run Code Online (Sandbox Code Playgroud)
产生以下编译器错误:
[dcc32 Error] Project1.dpr(13): E2251 Ambiguous overloaded call to 'MkDir' System.pas(5512): Related method: procedure MkDir(const string); Project1.dpr(3): Related method: procedure MkDir(const string); [dcc32 Error] Project1.dpr(14): E2251 Ambiguous overloaded call to 'MkDir' System.pas(5512): Related method: procedure MkDir(const string); Project1.dpr(3): Related method: procedure MkDir(const string); [dcc32 Error] Project1.dpr(15): E2251 Ambiguous overloaded call to 'MkDir' System.pas(5512): Related method: procedure MkDir(const string); Project1.dpr(3): Related method: procedure MkDir(const string);
请注意编译器如何帮助您告诉您哪两个方法无法消除歧义.如果您阅读完整的编译器错误消息,那么它将指导您解决问题的原因.
较旧的Delphi版本不会为您提供额外信息.因此,如果您处于该位置,则必须在源代码中搜索额外的内容MkDir.
更新
在编辑添加代码的问题之后,我们可以看到不兼容的重载来自一个相当令人惊讶的来源.你的代码是:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, System;
begin
MkDir('Test');
end.
Run Code Online (Sandbox Code Playgroud)
好吧,System它自动包含在每个单元中,它是编译器通过该uses子句的编译器缺陷.但错误的第二次包含System是造成歧义的原因.
Delphi的现代版本解决了这个问题,并且您的代码会产生
[dcc32 Error] E2004 Identifier redeclared: 'System'
显然,解决方案是消除虚假使用System.
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |