這可能是下面的前一個問題類似/延續:德爾福XE4給E2036「對象的
Why Delphi XE3 gives "E2382 Cannot call constructors using instance variables"?
現在我想要的Delphi XE4代碼相同(與」根據上述問題的解決方案,將「構造函數」更改爲「過程」)。
現在我有一個泛型列表也是這些東西,即我有
TCoordRect = object
public
function Something: Boolean;
end;
,然後對這些函數中的參數列表,這是我遍歷並嘗試直接訪問項目:
function DoSomething(AList: TList<TCoordRect>): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to AList.Count - 1 do
begin
Result := Result or AList[i].Something; // <-- Here comes the compiler error!
end;
end;
這給編譯器錯誤「E2036需要變量」。但是,如果我不直接訪問它,即認沽期權,而不是一個局部變量和使用,首先,然後它的工作原理:
function DoSomething(AList: TList<TCoordRect>): Boolean;
var
i: Integer;
ListItem: TCoordRect;
begin
Result := False;
for i := 0 to AList.Count - 1 do
begin
ListItem := AList[i];
Result := Result or ListItem.Something; // <-- Now this compiles!
end;
end;
另有「解決辦法」是刪除所有這些「對象」的類型和對其進行更改到'班',但我很好奇,爲什麼這不像以前那樣工作?這又是「編譯器朝着移動開發邁進」還是有一些更具體的原因,還是這是一個錯誤?順便說一句,我也報道這是一個質量控制問題,所以會看到是否有東西來自那裏。
我不確定在Delphi中恢復對象類型是否真的是**遺留**。 – OnTheFly 2013-04-24 13:31:38
關於'所有早期版本' - 相同的代碼在XE3和XE2上編譯沒有錯誤。我也不會感到驚訝,如果他們沒有解決這個問題,我同意這是一箇舊的遇到新的問題:)。與另一個問題的關係主要是因爲它基於相同的代碼,所以我猜這取決於你定義的關係,對我來說它是相關的。附:如果我從任何地方得到比「編譯器bug」更多的內部答案,那麼我會接受,否則我會接受你的答案:) – DelphiUser 2013-04-24 13:32:10
@DelphiUser不適合我。代碼以與2010年完全相同的方式失敗,XE2,XE3和XE4。從另一個問題涉及'object'的構造函數這個意義上講,這個問題並不相關,這個問題涉及到一個泛型編譯器的bug。 – 2013-04-24 13:37:00