2013-01-04 1 views
0

방금 ​​제네릭을 발견했고 (즉시 놀랐습니다!) 즉시 Delphi 2010 (업데이트 4 & 5 설치)이 코드가있는 경우 공포의 [DCC Fatal Error] F2084 Internal Error: L1737 메시지와 함께 실패 :Delphi Generics TDictionary로 인해 [DCC 치명적인 오류] F2084 내부 오류 : L1737 메시지가 발생했습니다.

// Global array of list 
IDsList : Array [1..5] Of TDictionary<Int64, Int64>; 

function MyProc; 
var 
    i : Integer; 
    Enum : TDictionary<Int64, Int64>.TPairEnumerator; 
begin 
    // ... 
    Enum := IDsList[i].GetEnumerator; 
    while Enum.MoveNext do 
    begin 
      // ... 
    end; 
end; 

정확하게, 델파이 내가 크게 내 코드를 단순화 배열을 사용하여이 줄 Enum := IDsList[i].GetEnumerator;

을 언급하지 않는 컴파일에 실패를하는 방식이있다 이 L1737 오류 메시지를 피하십시오?

추신. 델파이에 익숙하지 않습니다. 제네릭 만!

답변

5

이 코드는 MyProc의 오류가 수정되면 내 Delphi 2010에서 컴파일됩니다. 내부 코드로 이어지는 실제 코드에는 아마도 다른 것이있을 것입니다. 어떤 경우

은 여기 for/in 루프를 사용하는 것이 더 의미가 있습니다 :

var 
    Pair: TPair<Int64, Int64>; 
.... 
for Pair in IDsList[i] do 
    DoSomething(Pair); 

그리고 당신이 내부 오류를 피할 거라고했다 아마도합니다.

for/in으로 전환해도 내부 오류가 회피되지 않으면 오류를 나타내는 완전한 프로그램을 제공해야합니다. 시도하고 가능한 한 가장 작은 크기로 자르십시오. 질문을하거나 버그 보고서를 제출할 때 항상 좋은 습관입니다.

제네릭 프로그래밍을하고 싶다면 내부 오류가 쏟아져 나오지 않고 Delphi 2010을 넘어야합니다.

+0

귀하의 코드가 실제 프로젝트에서이 문제를 해결하지 못했을 까봐 두렵습니다. 나는 그 문제를 그 선로까지 추적했는데, 확실하다. 그래서 그것은 내 프로젝트에서 야기 된 다른 것이어야한다. 나는 XE2를 소유하고 있지만, 특히이 프로젝트를 업그레이드하는 데 정말로 귀찮은 일이 결코 없었습니다. 업그레이드를 시도 할 것이고, 나중에 발견 할 것입니다. 감사합니다! – TheDude

+0

작은 업데이트 : 구현 섹션에 '여기에 제안 됨'(https://forums.codegear.com/message.jspa?messageID=171141)과 같이 'Enum'선언을 넣습니다. '구현 ... var 열거 형 : TDictionary .TPairEnumerator; '이제 컴파일됩니다. 그러나 Delphi 2010과 제네릭은 잘 작동하지 않는다는 점에 동의하는 경향이 있습니다. – TheDude

+0

OK, 그러나 실제로는 전역 변수를 사용할 수 없습니다. –