Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.06.2017, 19:34
kenshi245 kenshi245 вне форума
Прохожий
 
Регистрация: 08.06.2017
Сообщения: 16
Версия Delphi: Delphi
Репутация: -625
По умолчанию Почему ругается на конструктор?

Добрый день, объясните, почему компилятор требует чтобы я указал inherited; в конструкторе класса, если этот конструктор ни от чего не наследуется?

Код:
type 

  MyClass = class(TObject)
  public
    constructor Create;
  end;

implementation

constructor MyClass.Create;
begin
 inherited; // без него ругается!!!
end;

А если добавить параметров в конструктор, то вообще придется прописывать inherited Create;

Код:
 type 

  MyClass = class(TObject)
  public
    constructor Create(MyName : string);
  end;

implementation

constructor MyClass.Create(MyName : string);
begin
  inherited Create; // Без него ругается!!!
end;

Это баг или с чем это может быть связано, я совсем запутался((
Ответить с цитированием
  #2  
Старый 12.06.2017, 00:33
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да не, вроде все нормально:
Код:
type
  TMyClass1 = class
    constructor Create;
  end;

  TMyClass2 = class(TObject)
    constructor Create;
  end;

  TMyClass3 = class(TObject)
    constructor Create(AParam : Integer);
  end;

constructor TMyClass1.Create;
begin

end;

constructor TMyClass2.Create;
begin

end;

constructor TMyClass3.Create(AParam: Integer);
begin
  inherited Create;
end;

Все компилится.
С последним случаем понятно. Inherited без параметров вызывает родительский метод с той же сигнатурой, а у родителя нет Create(AParam). Соотв. надо указывать имя. А первые варианты - без проблем.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
kenshi245 (15.06.2017)
  #3  
Старый 12.06.2017, 09:14
kenshi245 kenshi245 вне форума
Прохожий
 
Регистрация: 08.06.2017
Сообщения: 16
Версия Delphi: Delphi
Репутация: -625
По умолчанию

Цитата:
Сообщение от lmikle
Да не, вроде все нормально:
Код:
type
  TMyClass1 = class
    constructor Create;
  end;

  TMyClass2 = class(TObject)
    constructor Create;
  end;

  TMyClass3 = class(TObject)
    constructor Create(AParam : Integer);
  end;

constructor TMyClass1.Create;
begin

end;

constructor TMyClass2.Create;
begin

end;

constructor TMyClass3.Create(AParam: Integer);
begin
  inherited Create;
end;

Все компилится.
С последним случаем понятно. Inherited без параметров вызывает родительский метод с той же сигнатурой, а у родителя нет Create(AParam). Соотв. надо указывать имя. А первые варианты - без проблем.

Цитата:
(17): The Call of inherited constructor is mandatory
Вот что пишет если не указывать
Ответить с цитированием
  #4  
Старый 12.06.2017, 09:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Интересно, это какая версия?
Ну и опции компилятора проверить...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
kenshi245 (15.06.2017)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter