Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Вниз

Как избавиться от сообщений типа:   Найти похожие ветки 

 
Prok12   (2002-09-08 16:46) [0]

[Warning]: Constructing instance of "TGraphicBase" containing abstract methods?

Суть проблемы такова.
Имею базовый (родительский) класс:

type TGraphicBase = class(TImage)
......................
protected { Protected declarations }
procedure AboutBox; virtual; abstract;
......................
end;

Строю на основе этого класса несколько дочерних классов, в которых и описываю реализацию procedure AboutBox: в них эта процедура описывется, как override.

В модуле, где используются эти дочерние классы, описываю некоторые из них так:
MyChild: TGraphicBase, (полиморфизм), и создаю оператором
MyChild := TGraphicBase.Create(Self)

При этом получаю при компиляции указанное сообщение (относящееся к строке Create), хотя в целом вся программа работает нормально...

Аналогичную проблему имею, когда мой базовый класс происходит от TForm, а создаю я его с помощью переопределения (override) метода TForm.CreateNew. Снова не удаётся без этих Warning вводить свои абстрактные методы.


 
Anatoly Podgoretsky   (2002-09-08 16:49) [1]

Убирать не надо, а вот принять к действию стоит, ты создаешь базовый класс, в котором присутствуют абстрактные методы


 
Криворукий   (2002-09-08 16:52) [2]

>MyChild: TGraphicBase, (полиморфизм), и создаю оператором
>MyChild := TGraphicBase.Create(Self)

Это не полиморфизм.

Полиморфизм предполагает
MyChild: TGraphicBase, (полиморфизм), и создаю оператором
MyChild := TGraphicClildClass.Create(Self)

Причём в TGraphicClildClass (= class(TGraphicBase)) абстрактные методы перекрыты.

А создавать экземпляр базового класса в общем случае бессмысленно.


 
Prok12   (2002-09-09 10:27) [3]

С замечанием насчёт полиморфизма согласен. Попробую сформулировать по-другому.

Аналогичную проблему имею, когда мой базовый класс происходит от TForm, а создаю я его с помощью переопределения (override) метода TForm.CreateNew. Здесь я уже не использовал полиморфизм, т.е. описывал и создавал дочерние классы так:

type TMyBaseClass = class(TForm) // Базовый (родительский) класс
.............
procedure DrawPicture(AddBottomText: String); virtual; abstract;
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); override;
end;
{---------------------------------------------------------------}
type TMyChild = class(TMyBaseClass) // Дочерний класс
.............
procedure DrawPicture(AddBottomText: String); override;
end;
{---------------------------------------------------------------}
type MyChild: TMyChild
..................................
MyChild := TMyChild.CreateNew(nil, 0) // Создаём дочерний класс - и сразу тот-же Warning!

т.е, снова не удалось без этих Warning добавить свои абстрактные методы (хотя опять же - программа работает!).


 
Ученик   (2002-09-09 10:34) [4]

Избавление от Warning

type
TMyBaseClassClass = class of TMyBaseClass;

var
MyBaseClass : TMyBaseClassClass;
begin
MyBaseClass := TMyChild;
MyChild := MyBaseClass.CreateNew(nil, 0);
...




 
Юрий Федоров   (2002-09-09 10:39) [5]

{$WARNINGS OFF}
хотя в данном случае нужно именно бороться с причиной



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
3-60952
roadstar
2002-08-28 13:22
2002.09.19
Повторяю вопрос...


3-60986
Serg2002
2002-08-29 12:23
2002.09.19
Ограничение лицензии IB6 на 5 пользователей


1-61213
AFrolov
2002-09-03 14:43
2002.09.19
Access Violation после завершения работы приложения


1-61199
Sour
2002-09-07 19:14
2002.09.19
Как отловить собыитие, когда в CD-ROM привод запихали диск.


4-61367
Ученик
2002-07-25 17:46
2002.09.19
DrawFrameControl и Windows XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский