调用LastDelimiter()将无法编译

时间:2011-10-31 08:17:54

标签: delphi

Delphi 7 - 如果我创建一个新项目并添加一行

spacePos := LastDelimiter(' ' , 'spaced out');

它构建。

如果我尝试在自己的项目中使用LastDelimiter,则会失败。

我开始使用stamenet比较LastDelimter(#$D#$A, myString)和wen,但是我尝试使用上面的留置权失败了,这也失败了。

我做use SysUtils,但在创建新项目时甚至没有必要。

如果我注释掉那条线,我的真实项目就会很好。如果我取消注释它,我会得到“缺少运算符或分号”。同样的事情,如果我将LastDelimiter移动到一个赋值,即使在它所在的函数的第一行 - 它实际上看起来不像前一行的问题。

任何想法(没有我发布几个klocs)?

由于

2 个答案:

答案 0 :(得分:5)

也许您范围内的某个地方是一个定义类似于以下内容的全局变量:

var
  LastDelimiter: Integer;

检查项目中使用的单位。它应该是接口部分中声明的全局变量。

或者它可以是在接口部分声明的常量,类似于:

const
  LastDelimiter = 32;

答案 1 :(得分:4)

您已经了解了命名空间或标识符或“范围冲突”的内容。您的实现或接口使用子句中的某个单元也定义了LastDelimiter,并且由于它是最内层或最近的声明,因此在您指定SysUtils前缀之前,它会使SysUtils中的特定标识符不可见。

当你有命名空间冲突时,你应该用它的单位名称限定函数名,然后它会为你编译:

  x := SysUtils.LastDelimiter( .... );

由于这个原因,一些熟悉C#和Java等语言的开发人员习惯于总是要求命名空间,因此他们的代码如下所示:

 x := namespace.Thing1.Thing2.GetInput( ... );

仅仅因为我们并不总是在Delphi中这样做并不意味着你不应该这样做。