首页 文章

传递var参数时,“E2197常量对象不能作为var参数传递”

提问于
浏览
3

这段代码工作正常:

procedure TForm2.Timer1Timer(Sender: TObject);
var
  Text: string;
begin  SetLength (Text,555);
  GetWindowText (getforegroundwindow, PChar (Text),555);
  Form2.gtListBox1.Items.Add (
    IntToStr (getforegroundwindow) + ': ' + Text);
end;

但是当我放

var
  Text: string;

从Timer1Timer事件处理程序到单元实现部分或单元var部分中的''text : string''我得到错误:E2197常量对象不能作为var参数传递
根据文件:

当您尝试将常量作为函数或过程的var或out参数发送时,会出现此错误消息 .

但我没有宣布文本为常数,为什么我得到这个错误?
Edit: @mason wheeler:我不明白为什么这样做:

implementation
{$R *.dfm}
 var 
 char :integer;//first of all why does delphi let me declare variable that is also a type name
procedure TForm2.Button1Click(Sender: TObject);
begin
char:=11; 
showmessage(IntToStr(char));
end;

我的第一个代码没有工作,因为我将文本声明为字符串,你说:''the compiler might think it'是对类型的引用,而不是变量'',而不是为什么编译器认为它不是对类型的引用而不是在这种情况下的变量?我很迷惑
Edit2: 我现在明白了什么是错的,但仍然有一个混乱我没有使用 with 声明然后为什么德尔福正在对待我好像在使用:

with
      form1 do
       text := 'blahblahblah';

这在delphi部分是错误的我的意思是delphi不应该让我们做 text := 'blah'form1.text := blah;with form1 do text := 'blah'; 我需要打开/关闭一些编译器设置我正在使用delphi 2010而没有任何ide专家

3 回答

  • 2

    实际上,如果在实现部分声明 Text 并在 Timer1Timer(Sender: TObject) 中使用它,编译器会将Text视为 Form1.Text .

    将文本名称更改为sText,它将起作用 .

    Edit 1:

    因为像 Form1.Char 这样的表单没有属性/字段 .

  • 1

    这可能是名字混乱 . “Text”也是类型名称,是遗留文本文件类型 . 因此,如果您在不同的范围内声明变量,编译器可能会认为它是对类型的引用,而不是对变量的引用 . 尝试将其命名为其他内容,它应该有效 .

  • 4

    关于你的编辑#2:

    那个's a standard convention of object-oriented programming. When you'正在为一个对象编写一个方法,该代码被隐式地解释为在该对象的范围内 . 换句话说,每个对象方法都可以被视为隐藏在 with self do 块中 .

相关问题