Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
ВнизПерекрытие конструктора с расширенным набором параметров Найти похожие ветки
← →
FunkyByte © (2006-01-21 14:56) [0]Доброго времени суток, уважаемые мастера. При написании класса-потомка TForm возникла необходимость перекрыть конструктор, добавив в новом конструкторе 2 дополнительных параметра. Пытался реализовать так:
...
type
TMyClass=class(TForm)
...
public
constructor Create(AOwner: TComponent; NewParam1, NewParam2: Extended); override;
...
end;
...
Компиллятор выдаёт ошибку Declaration of "Create" differs from previous declaration. Как можно решить эту проблему? Заранее благодарен.
← →
begin...end © (2006-01-21 15:03) [1]Замените override на reintroduce.
← →
Anatoly Podgoretsky © (2006-01-21 15:04) [2]FunkyByte © (21.01.06 14:56)
Перекрытие с разным набором невозможно в языке.
Можно сделать перегрузку или скрыть старый метод.
← →
Sergey Masloff (2006-01-21 16:23) [3]reintroduce просто давит предупреждение о скрытии базового виртуального метода. Если старый конструктор тоже нужен (в новом классе хочется писать) тогда все же overload
← →
Sergey Masloff (2006-01-21 16:38) [4]я торможу. В теме ж написано перекрытие...
← →
begin...end © (2006-01-21 17:02) [5]> Sergey Masloff (21.01.06 16:23) [3]
> Если старый конструктор тоже нужен (в новом классе хочется
> писать) тогда все же overload
Если старый конструктор нужен в том смысле, что его предполагается вызывать из методов потомка, то подойдёт и reintroduce.
← →
Alexander Panov © (2006-01-21 17:03) [6]
> Компиллятор выдаёт ошибку Declaration of "Create" differs
> from previous declaration. Как можно решить эту проблему?
> Заранее благодарен.
У тебя явно ошибка выдается в секции implementation, а не в приведенном коде.
Кроме того, убери override.
В реализации нового колнструктора вначале можешь вызватьinherited Create(...);
К тому же, конструктров может быть несколько, необязательно называть новый конструктор так же, как в родительском классе.
← →
begin...end © (2006-01-21 17:10) [7]> Alexander Panov © (21.01.06 17:03) [6]
> У тебя явно ошибка выдается в секции implementation, а не
> в приведенном коде.
Почему это?
← →
Fay © (2006-01-21 17:46) [8]2 FunkyByte © (21.01.06 14:56)
constructor Create(AOwner: TComponent; NewParam1, NewParam2: Extended); reintroduce;
← →
Alexander Panov © (2006-01-21 18:39) [9]>begin...end
> Почему это?
Ошибся, сообщение действительно здесь будет.
← →
SergP. (2006-01-21 18:43) [10]Кстати, пользуясь случаем и я задам вопросик...
У меня аналогично используется перегрузка (overload)
но как избавиться от варнинга, который уже задолбал?
[Warning] ViewHist.pas(34): Method "Create" hides virtual method of base type "TCustomForm"
← →
begin...end © (2006-01-21 18:46) [11]> SergP. (21.01.06 18:43) [10]
reintroduce
← →
Fay © (2006-01-21 18:49) [12]Ответы кто-нибудь читает?
← →
SergP © (2006-01-21 21:06) [13]
> begin...end © (21.01.06 18:46) [11]
> > SergP. (21.01.06 18:43) [10]
>
> reintroduce
дык в том то и дело что reintroduce не проходит...Поэтому и спрашивал... С reintroduse вообще Error.
← →
SergP © (2006-01-21 21:15) [14]Просто старый конструктор используется как и в методах данного класса, так и из других юнитов...
← →
SergP © (2006-01-21 21:24) [15]Кстати если использовать reintroduсe, то компиляция (ctrl+F9) проходит без ошибок, а вот если сделать build то и вылазит ошибка
[Error] main.pas(737): Incompatible types: "Byte" and "TApplication"
т.е. компилятор думает что нужно использовать новый констроктор, а в данном случае требуется старый...
← →
begin...end © (2006-01-21 21:35) [16]> SergP © (21.01.06 21:15) [14]
> Просто старый конструктор используется как и в методах данного
> класса, так и из других юнитов...
constructor Create(...); reintroduce; overload;
← →
SergP © (2006-01-21 21:48) [17]
> begin...end © (21.01.06 21:35) [16]
> > SergP © (21.01.06 21:15) [14]
>
> > Просто старый конструктор используется как и в методах
> данного
> > класса, так и из других юнитов...
>
> constructor Create(...); reintroduce; overload;
блин... действительно так работает.
а я пробовал и
constructor Create(...); overload;
и
constructor Create(...); reintroduce;
и
constructor Create(...); overload; reintroduce;
и не мог понять почему компилятор ругался... :-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.02.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c