“Tipi di effettivi e formali parametri var devono essere identici” errore di procedura
Domanda
Sto cercando di scrivere una procedura in Delphi.
Questa procedura prende il nome di elemento TControl
discendente e quindi provare a modificare alcune proprietà.
Ma quando cerco di farlo, Delphi dà un errore del tipo:
E2033 Tipi di effettiva e formale var parametri devono essere identici
Procedura:
procedure Change_prop(var Control: TControl;height:integer;width:integer);
begin
//......
end;
Esempio di utilizzo: Change_prop(Label1, 50,200);
Che cosa può essere la soluzione di quel error..Thanks.
Soluzione
Hai solo bisogno di rimuovere la var nel parametro di controllo e renderlo un parametro di valore. Poiché gli oggetti Delphi sono effettivamente implementati come tipi riferimento, è possibile chiamare i metodi su di loro, campi membro cambiamento, ecc, anche se li passano a una procedura come valore o un parametro const.
Altri suggerimenti
È sufficiente rimuovere var - non è necessario per modificare le proprietà di controllo:
procedure Change_prop(Control: TControl;height:integer;width:integer);
begin
......
end;
Come David ha detto, il problema è nella var . Ciò non significa che è possibile modificare i membri del TControl, significa che è possibile sostituisci il TControl con un altro, completamente diverso TControl, perché gli oggetti sono tipi di riferimento.
Se si sta passando un oggetto a un var parametro, la variabile si passa deve essere dichiarato come esattamente lo stesso tipo come parametro al fine di preservare la sicurezza tipo. In caso contrario, si potrebbe fare questo:
procedure TForm1.VarControl(var control: TControl);
begin
control := TButton.Create;
end;
procedure TForm1.Mistake;
begin
VarControl(self.Memo1); //defined as TMemo
Memo1.Lines.Text := 'Undefined behavior here...';
end;