2013-05-24 4 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

Смежные вопросы