6 / 4 / 4
Регистрация: 26.06.2017
Сообщений: 142
1

Динамическое создание StringGrid с применением класса-перехватчика

01.10.2020, 14:12. Показов 2255. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день.

Использую класс перехватчик, по инструкции
Классы-перехватчики (interceptor classes)

C++
1
2
3
4
5
6
7
8
9
10
11
12
namespace MyGrid       // как это работает http://www.cyberforum.ru/cpp-builder/thread1368916.html
{
class TStringGrid: public Grids::TStringGrid
    {
    public:
    // мои методы
    // мои методы
    // мои методы
    // мои методы
    };
};
#define TStringGrid MyGrid::TStringGrid
попытка динамически создать StringGrid
TStringGrid *grid = new TStringGrid(Grid);
выдаёт ошибку
[bcc32 Error] WordExcel.hpp(556): E2125 Compiler could not generate default constructor for class 'MyGrid::TStringGrid'

Подскажите, пожалуйста, как исправить?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2020, 14:12
Ответы с готовыми решениями:

Динамическое создание StringGrid
Всем привет! Я создаю Stringgrid динамически. Создалось. Хочу написать проверку вводимых символов...

Динамическое создание StringGrid
Привет всем! Помогите решить такую задачу. Имеется один ComboBox, нужно чтобы при выборе к примеру...

Динамическое создание экземпляра класса.
Есть программа. Как сделать что-бы пользователь вводил имя, а затем создавался экземпляр класса с...

динамическое создание объектов класса
Пишу программу которая при нажатие кнопки будет кидать на форму изображение, описал всё это в...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32793 / 21133 / 8144
Регистрация: 22.10.2011
Сообщений: 36,393
Записей в блоге: 8
01.10.2020, 15:17 2
Для начала рассказать, что такое Grid, которое передается в конструктор.
0
6 / 4 / 4
Регистрация: 26.06.2017
Сообщений: 142
01.10.2020, 15:56  [ТС] 3
Цитата Сообщение от volvo Посмотреть сообщение
Для начала рассказать, что такое Grid, которое передается в конструктор.
это экземпляр TStringGrid, созданный не динамически, а обычным образом, на форме
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32793 / 21133 / 8144
Регистрация: 22.10.2011
Сообщений: 36,393
Записей в блоге: 8
01.10.2020, 16:19 4
Лучший ответ Сообщение было отмечено roma2415 как решение

Решение

Значит, нужен конструктор:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace MyGrid       // как это работает http://www.cyberforum.ru/cpp-builder/thread1368916.html
{
class TStringGrid: public Grids::TStringGrid
    {
    public:
        __fastcall virtual TStringGrid(Classes::TComponent* AOwner) : Grids::TStringGrid(AOwner) {} // <---
 
    // мои методы
    // мои методы
    // мои методы
    // мои методы
    };
};
#define TStringGrid MyGrid::TStringGrid
1
6 / 4 / 4
Регистрация: 26.06.2017
Сообщений: 142
27.09.2023, 18:12  [ТС] 5
Цитата Сообщение от volvo Посмотреть сообщение
Значит, нужен конструктор:
Извиняюсь за запоздалую реакцию, раньше этого не знал и не обратил внимание. Конструктор то virtual !
C++
1
__fastcall virtual TStringGrid(Classes::TComponent* AOwner) : Grids::TStringGrid(AOwner) {} // <---
Как вообще такое возможно, почему компилятор не ругается? Я попробовал его убрать и протестировал пару функций, без virtual него тоже работает. Для чего он тут? Объясните пожалуйста)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32793 / 21133 / 8144
Регистрация: 22.10.2011
Сообщений: 36,393
Записей в блоге: 8
27.09.2023, 18:53 6
Цитата Сообщение от roma2415 Посмотреть сообщение
почему компилятор не ругается?
А почему он должен ругаться? Вообще-то у классов VCL всегда виртуальные конструкторы, в частности, у TStringGrid-а...
0
6 / 4 / 4
Регистрация: 26.06.2017
Сообщений: 142
27.09.2023, 19:15  [ТС] 7
Цитата Сообщение от volvo Посмотреть сообщение
А почему он должен ругаться
ну в C++ то виртуальные конструкторы запрещены, компиляторы ругаются. Насколько я понимаю запрещены, потому что в момент объявления объекта с динамическим связыванием родителя еще не существует, не существует и его конструкторов. Получается Билдеровский компилятор как-то это обходит. При этом, если в обычном классе попробовать создать виртуальный конструктор - как везде ошибку выдаёт.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32793 / 21133 / 8144
Регистрация: 22.10.2011
Сообщений: 36,393
Записей в блоге: 8
27.09.2023, 19:21 8
Билдеровский компилятор завязан на Дельфи, все, что умеет Дельфи - он тоже должен уметь. Так что да, это магия компилятора.
0
27.09.2023, 19:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.09.2023, 19:21
Помогаю со студенческими работами здесь

Динамическое создание экземпляров класса
Здравствуйте! Имеется класс TUnits и родительский класс TGameObjects, необходимо, чтобы при нажатии...

Динамическое создание объекта класса
Примерно что должно получится: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std;...

Динамическое создание объекта класса
Всем салют. Вопрос такой, кто может подсказать, где я косячу ? ))) Panel^ bar = gcnew...

Динамическое создание объектов класса
Всем привет. При компиляции выдает ошибку Unit1.cpp(26): E2451 Undefined symbol 'product' и ...

Динамическое создание экземпляра класса
Подскажите начинаюшему! Есть FileUpload, с помощью него я хочу отправить файл на почтовый ящик. ...

Динамическое создание класса в MVC – как?
Доброго времени суток! Что есть сейчас: Пишу свою MVC (велосипед обучения ради) и сейчас, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru