Помогите создать потомок класса
От: lightix  
Дата: 22.01.03 12:17
Оценка:
В 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. После {} точка с запятой ошибочна.
Re: Помогите создать потомок класса
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 22.01.03 12:30
Оценка:
Здравствуйте, 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) {} (без ; в конце)
...
- Искренне ваш, Поросенок Пафнутий
Re[2]: Помогите создать потомок класса
От: lightix  
Дата: 22.01.03 12:41
Оценка:
пишу вот так вот :
class TMenuItemTask:TMenuItem {
__published: TMenuItemTask(TComponent c):TMenuItem(c) {}
};
При компиляции выдает:
E2285 Could not find a match for 'TMenuItem::TMenuItem(TComponent)'
Re[2]: Помогите создать потомок класса
От: lightix  
Дата: 22.01.03 12:52
Оценка:
написал вот так:
class TMenuItemTask: public TMenuItem {
__published: TMenuItemTask(TComponent* c) : TMenuItem(c) {}
};
выдало ошибку
E2113 Virtual function 'TMenuItemTask::TMenuItemTask(TComponent *)' conflicts with base class 'TMenuItem'
Re[3]: Помогите создать потомок класса
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 22.01.03 13:03
Оценка:
Здравствуйте, lightix, Вы писали:

[]

Писать так и не париться:


class TMenuItemTask: public TMenuItem 
{ 
public: 
__fastcall TMenuItemTask(TComponent* c) : TMenuItem(c) {} 
__fastcall ~TMenuItemTask() {}
};


Должно работать.
Re[3]: Помогите создать потомок класса
От: Аноним  
Дата: 22.01.03 13:19
Оценка:
Здравствуйте, lightix,

объявите конструктор __fastcall.
Re[2]: Помогите создать потомок класса
От: Владик Россия  
Дата: 22.01.03 13:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>2. Виртуальный конструктор в Си++Билдере должен располагаться не в открытой (public), а в опубликованной (__published) секции.


Совсем не обязательно. Хоть в private. А вот слово virtual желательно указывать явно, иначе может глючить. Ну и __fastcall само-собой...
Как все запущенно...
Re[4]: Помогите создать потомок класса
От: lightix  
Дата: 22.01.03 13:20
Оценка:
Спасибо, действительно заработало
А что виртуальные функции всегда нужно объявлять как __fastcall в Builder'е ?
Re[5]: Помогите создать потомок класса
От: Владик Россия  
Дата: 22.01.03 13:30
Оценка:
Здравствуйте, lightix, Вы писали:

L>Спасибо, действительно заработало

L>А что виртуальные функции всегда нужно объявлять как __fastcall в Builder'е ?

Ее уже объявили до тебя (в VCL). Соответсвенно тебе нужно объявить так же.
А вот почему в билдере не сделали __fastcall по умолчанию — не знаю, порой задалбывает...
Как все запущенно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.