|
|
Регистрация | << Правила форума >> | 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)
|
#7
|
|||
|
|||
Да, кстати, попробуй в первом примере вызвать коструктор вот так:
Код:
MyClass := TChildClass.Create('John',False); |