![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Что мне сделать, чтобы я мог не передавать необязательные параметры при создании объекта класса, при такой конструкции, компилятор ругается на нехватку параметров.
Код:
unit Test;
interface
type
TBaseClass = class
public
Name: String;
Active: Boolean;
constructor Create(Name: String; Active: Boolean = False);
end;
TChildClass = class(TBaseClass)
end;
implementation
constructor TBaseClass.Create(Name: String; Active: Boolean = False);
begin
inherited Create;
Self.Name := Name;
Self.Active := Active;
end;
var
MyClass: TChildClass;
begin
MyClass := TChildClass.Create('John'); // Not enough actual parameters.
end.Если написать так, то все работает, но сама идея переписывать каждый раз конструктор мне кажется неправильной. Код:
unit Test;
interface
type
TBaseClass = class
public
Name: String;
Active: Boolean;
constructor Create(Name: String; Active: Boolean = False);
end;
TChildClass = class(TBaseClass)
public
constructor Create(Name: String; Active: Boolean = False);
end;
implementation
constructor TBaseClass.Create(Name: String; Active: Boolean = False);
begin
inherited Create;
Self.Name := Name;
Self.Active := Active;
end;
constructor TChildClass.Create(Name: String; Active: Boolean = False);
begin
inherited Create(Name, Active);
end;
var
MyClass: TChildClass;
begin
MyClass := TChildClass.Create('John');
end.Может есть какое-то более простое решение? |
|
#2
|
|||
|
|||
|
Странно, у меня на Delphi 10.2 первый пример успешно скомпилился.
Попробуй добавить virtual при описании конструктора: Код:
TBaseClass = class
public
Name: String;
Active: Boolean;
constructor Create(Name: String; Active: Boolean = False); virtual;
end; |
|
#3
|
|||
|
|||
|
Не помогло, все ту же ошибку выдает
![]() |
|
#4
|
|||
|
|||
|
Какая версия Delphi?
Если будет время вечером - проверю. Хотя странно, что-то тут не так, т.к. по сути первый пример должен работать. Может ты не весь код привел? |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
kenshi245 (07.01.2020)
| ||
|
#5
|
|||
|
|||
|
Версию точно не подскажу, это встроенный в другую программу компилятор (бот для lineage2), код я показал полностью, видимо в моем случае поможет только overload?
|
|
#6
|
|||
|
|||
|
Ну тогда это явный косяк встроенного компилятора.
На родной Дельфе все работает. Может там FreePascal какой-нить... |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
kenshi245 (08.01.2020)
| ||