В C++ Builder есть класс TMenuItem в VCL
Мне нужно создать его потомок, добавив в него еще одно свойство.
Пишу так:
class TMenuItemTask : public TMenuItem {
public: TMenuItemTask(TComponent):TMenuItemTask(TComponent)
{};
AnsiString TaskName;
};
и это не работает.
Подскажите что делать?
22.01.03 15:50: Перенесено модератором из 'C/C++' — ПК
Re: Помогите создать потомок класса
От:
Аноним
Дата:
22.01.03 12:27
Оценка:
Здравствуйте, lightix, Вы писали:
L>В C++ Builder есть класс TMenuItem в VCL L>Мне нужно создать его потомок, добавив в него еще одно свойство. L>class TMenuItemTask : public TMenuItem { L>public: TMenuItemTask(TComponent):TMenuItemTask(TComponent) L> {}; L> AnsiString TaskName; L> };
L>и это не работает.
1. Передается в виртуальный конструктор не TComponent, а TComponent*.
2. Виртуальный конструктор в Си++Билдере должен располагаться не в открытой (public), а в опубликованной (__published) секции.
3. После {} точка с запятой ошибочна.
Здравствуйте, lightix, Вы писали:
L>В C++ Builder есть класс TMenuItem в VCL L>Мне нужно создать его потомок, добавив в него еще одно свойство. L>Пишу так: L>class TMenuItemTask : public TMenuItem { L>public: TMenuItemTask(TComponent):TMenuItemTask(TComponent) L> {}; L> AnsiString TaskName; L> };
L>и это не работает. L>Подскажите что делать?
А нет так ли нужно:
...
public: TMenuItemTask(TComponent c):TMenuItem(c) {} (без ; в конце)
...
пишу вот так вот :
class TMenuItemTask:TMenuItem {
__published: TMenuItemTask(TComponent c):TMenuItem(c) {}
};
При компиляции выдает:
E2285 Could not find a match for 'TMenuItem::TMenuItem(TComponent)'
написал вот так:
class TMenuItemTask: public TMenuItem {
__published: TMenuItemTask(TComponent* c) : TMenuItem(c) {}
};
выдало ошибку
E2113 Virtual function 'TMenuItemTask::TMenuItemTask(TComponent *)' conflicts with base class 'TMenuItem'
Здравствуйте, Аноним, Вы писали:
А>2. Виртуальный конструктор в Си++Билдере должен располагаться не в открытой (public), а в опубликованной (__published) секции.
Совсем не обязательно. Хоть в private. А вот слово virtual желательно указывать явно, иначе может глючить. Ну и __fastcall само-собой...
Здравствуйте, lightix, Вы писали:
L>Спасибо, действительно заработало L>А что виртуальные функции всегда нужно объявлять как __fastcall в Builder'е ?
Ее уже объявили до тебя (в VCL). Соответсвенно тебе нужно объявить так же.
А вот почему в билдере не сделали __fastcall по умолчанию — не знаю, порой задалбывает...