Delphi 7 - 如果我创建一个新项目并添加一行
spacePos := LastDelimiter(' ' , 'spaced out');
它构建。
如果我尝试在自己的项目中使用LastDelimiter,则会失败。
我开始使用stamenet比较LastDelimter(#$D#$A, myString)
和wen,但是我尝试使用上面的留置权失败了,这也失败了。
我做use
SysUtils,但在创建新项目时甚至没有必要。
如果我注释掉那条线,我的真实项目就会很好。如果我取消注释它,我会得到“缺少运算符或分号”。同样的事情,如果我将LastDelimiter移动到一个赋值,即使在它所在的函数的第一行 - 它实际上看起来不像前一行的问题。
任何想法(没有我发布几个klocs)?
由于
答案 0 :(得分:5)
也许您范围内的某个地方是一个定义类似于以下内容的全局变量:
var
LastDelimiter: Integer;
检查项目中使用的单位。它应该是接口部分中声明的全局变量。
或者它可以是在接口部分声明的常量,类似于:
const
LastDelimiter = 32;
答案 1 :(得分:4)
您已经了解了命名空间或标识符或“范围冲突”的内容。您的实现或接口使用子句中的某个单元也定义了LastDelimiter,并且由于它是最内层或最近的声明,因此在您指定SysUtils前缀之前,它会使SysUtils中的特定标识符不可见。
当你有命名空间冲突时,你应该用它的单位名称限定函数名,然后它会为你编译:
x := SysUtils.LastDelimiter( .... );
由于这个原因,一些熟悉C#和Java等语言的开发人员习惯于总是要求命名空间,因此他们的代码如下所示:
x := namespace.Thing1.Thing2.GetInput( ... );
仅仅因为我们并不总是在Delphi中这样做并不意味着你不应该这样做。