2013-05-24 6 views
1

TDictionary를 선택적 매개 변수로 전달하는 방법은 무엇입니까?TDictionary를 선택적 매개 변수로 전달하는 방법은 무엇입니까?

TMyDict = TDictionary<String, String>; 

TTest = class 
    procedure Render(Id: Integer; Name: String = ''; Variables: TMyDict = nil); //error 
end; 

나는 이유는 모르겠지만,이 코드는 잘 작동 :

는 예를 들어, 내가 클래스 내부에 그것을 사용하는 경우 작동하지 않습니다. 그러나 나는 그것을 사용할 수 없다.

procedure Render(Id: Integer; Name: String = ''; Variables: TMyDict = nil); 
begin 
    // Do something... 
end; 

의견이 있으십니까?

+1

을 당신은 한 줄의 코드가 "오류"로 표시되어있다; plesae는 * 어느 오류가 발생하는지 알려줍니다. 오류 메시지를 복사하여 붙여 넣으십시오. "잘 작동합니다"라는 코드가 있지만 "사용할 수 없다"고 말하면됩니다. 그것이 잘 작동하면, 무엇이 당신을 멈추게할까요? –

+0

미래에 "작동하지 않는다"는 말은 "효과가 없다"는 의미입니다. 여기에서 화면을 볼 수 없으며 생각을 읽을 수도 없으므로 (단순히 "작동하지 않는"방법을 이미 알고 있으므로) 우리에게 알려 주면 훨씬 쉽습니다. 또한 "오류"라고 말하면 그 의미도 설명해 주시고, * 정확한 * 오류 메시지가 나타나면 알려주십시오. 실제로 우리가 할 수있는 정보를 실제로 제공하면 도움을주는 것이 훨씬 쉬워집니다. 감사. –

답변

5

귀하의 구현 선언에 클래스가 없습니다. 그것은해야한다 : 또한 구현의 기본 값을 생략하는 것이 좋습니다

procedure TTest.Render(Id: Integer; Name: String = ''; Variables: TMyDict = nil); 
//  ^^^^^^ 
begin 
    // Do something... 
end; 

.

여기에 컴파일 완전한 프로그램이 지점 설명하기 위해 :

program SO16740725; 
{$APPTYPE CONSOLE} 

uses 
    Generics.Collections; 

type 
    TMyDict = TDictionary<string, string>; 

type 
    TTest = class 
    procedure Render(Id: Integer; Name: string=''; Variables: TMyDict=nil); 
    end; 

procedure TTest.Render(Id: Integer; Name: string; Variables: TMyDict); 
begin 
    // Do something... 
end; 

begin 
end. 
+1

내 취향은 혼란을 피하기 위해 구현을 100 % 동일하게 유지하는 것입니다 (기본값 포함) ... – Remko

관련 문제