Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445

Как сделать import класса TObject в обычный юнит?

27.04.2015, 14:17. Показов 1907. Ответов 6
Метки нет (Все метки)

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

Разбираюсь с инклюдами и алгоритмом подключения файлов в CBuilder.

Есть Vcl application - Main (.cpp, .h) , а также Func unit (не vcl)

В файле Main.h подключаю Func.h таким образом (после библиотечных, сгенерируемых инклюдов):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#ifndef MainH
#define MainH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "cxClasses.hpp"
#include "cxControls.hpp"
#include "cxCustomData.hpp"
#include "cxData.hpp"
#include "cxDataStorage.hpp"
#include "cxDBData.hpp"
#include "cxEdit.hpp"
#include "cxFilter.hpp"
#include "cxGraphics.hpp"
#include "cxGrid.hpp"
#include "cxGridCustomTableView.hpp"
#include "cxGridCustomView.hpp"
#include "cxGridDBTableView.hpp"
#include "cxGridLevel.hpp"
#include "cxGridTableView.hpp"
#include "cxLookAndFeelPainters.hpp"
#include "cxLookAndFeels.hpp"
#include "cxStyles.hpp"
#include "dxSkinBlack.hpp"
#include "dxSkinBlue.hpp"
#include "dxSkinCaramel.hpp"
#include "dxSkinCoffee.hpp"
#include "dxSkinDarkRoom.hpp"
#include "dxSkinDarkSide.hpp"
#include "dxSkinFoggy.hpp"
#include "dxSkinGlassOceans.hpp"
#include "dxSkiniMaginary.hpp"
#include "dxSkinLilian.hpp"
#include "dxSkinLiquidSky.hpp"
#include "dxSkinLondonLiquidSky.hpp"
#include "dxSkinMcSkin.hpp"
#include "dxSkinMoneyTwins.hpp"
#include "dxSkinOffice2007Black.hpp"
#include "dxSkinOffice2007Blue.hpp"
#include "dxSkinOffice2007Green.hpp"
#include "dxSkinOffice2007Pink.hpp"
#include "dxSkinOffice2007Silver.hpp"
#include "dxSkinOffice2010Black.hpp"
#include "dxSkinOffice2010Blue.hpp"
#include "dxSkinOffice2010Silver.hpp"
#include "dxSkinPumpkin.hpp"
#include "dxSkinsCore.hpp"
#include "dxSkinscxPCPainter.hpp"
#include "dxSkinsDefaultPainters.hpp"
#include "dxSkinSeven.hpp"
#include "dxSkinSharp.hpp"
#include "dxSkinSilver.hpp"
#include "dxSkinSpringTime.hpp"
#include "dxSkinStardust.hpp"
#include "dxSkinSummer2008.hpp"
#include "dxSkinValentine.hpp"
#include "dxSkinXmas2008Blue.hpp"
#include <ADODB.hpp>
#include <DB.hpp>
#include "cxDBLookupComboBox.hpp"
#include "cxDBVGrid.hpp"
#include "cxInplaceContainer.hpp"
#include "cxVGrid.hpp"
#include <ExtCtrls.hpp>
#include "cxDBEditRepository.hpp"
#include "cxPC.hpp"
#include <DBCtrls.hpp>
#include <Buttons.hpp>
#include <DBGrids.hpp>
#include <Grids.hpp>
#include "cxContainer.hpp"
#include "cxDBEdit.hpp"
#include "cxMaskEdit.hpp"
#include "cxTextEdit.hpp"
#include "cxButtonEdit.hpp"
#include "cxCalc.hpp"
#include "cxDropDownEdit.hpp"
#include "cxEditRepositoryItems.hpp"
#include "cxCurrencyEdit.hpp"
#include "cxDBShellComboBox.hpp"
#include "cxShellComboBox.hpp"
#include "cxShellCommon.hpp"
#include <ComCtrls.hpp>
#include <ShlObj.hpp>
#include "cxCalendar.hpp"
#include "cxExtEditRepositoryItems.hpp"
#include <Mask.hpp>
#include "cxSpinEdit.hpp"
#include "cxTimeEdit.hpp"
#include "cxDrawTextUtils.hpp"
#include "dxBkgnd.hpp"
#include "dxPrnDev.hpp"
#include "dxPrnPg.hpp"
#include "dxPSCompsProvider.hpp"
#include "dxPSCore.hpp"
#include "dxPScxEditorProducers.hpp"
#include "dxPScxExtEditorProducers.hpp"
#include "dxPScxPageControlProducer.hpp"
#include "dxPSEdgePatterns.hpp"
#include "dxPSEngn.hpp"
#include "dxPSFillPatterns.hpp"
#include "dxPSGlbl.hpp"
#include "dxPSPDFExport.hpp"
#include "dxPSPDFExportCore.hpp"
#include "dxPSPrVwAdv.hpp"
#include "dxPSPrVwRibbon.hpp"
#include "dxPSPrVwStd.hpp"
#include "dxPSUtl.hpp"
#include "dxSkinsdxBarPainter.hpp"
#include "dxWrap.hpp"
#include "dxPScxCommon.hpp"
#include "dxPScxGrid6Lnk.hpp"
 
// модуль функций обработчиков
#include "Func.h"
В файле Func.h подключаю Main.h , чтобы получить доступ к компонентам (компоненты форм и для работы с БД)

C++
1
2
3
#ifndef FuncH
#define FuncH
#include "Main.h"

При компиляции ошибка ругается на объявление функции в файле Func.h:

C++
1
void refreshGboxes(TObject * Sender);

[BCC32 Error] Func.h(21): E2147 'TObject' cannot start a parameter declaration
Full parser context
Department.cpp(6): #include classes\Department\Department.h
Department.h(9): #include Main.h
Main.h(9): #include Data.h
Data.h(7): #include Func.h



И почему то ругается на UnicodeString в этом же файле:

C++
1
UnicodeString getRadicalObName(UnicodeString obName, UnicodeString suffix);

[BCC32 Error] Func.h(39): E2141 Declaration syntax error
Full parser context
Department.cpp(6): #include classes\Department\Department.h
Department.h(9): #include Main.h
Main.h(9): #include Data.h
Data.h(7): #include Func.h


Я очень запутался с этими билдеровскими подключениями, помогите пожалуйста, в чем причина может быть и где я ошибаюсь.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2015, 14:17
Ответы с готовыми решениями:

Как сделать import?
Всем привет! У меня есть каталог main, в нем лежат два каталога first и second, в которых соответственно лежат файлы first_1.py и...

Как сделать юнит тест для функции, которая находит максимальное из 3 чисел?
Подскажите пожалуйста, как сделать простой тест на javascript без библиотек для этой функции, находящей максимальное из трех чисел. ...

Директива import (Как работает import?)
Например есть 2 модуля. В первом модуле import pygame и далее работаем с окном. Во втором модуле тоже import pygame и далее работаем с...

6
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.04.2015, 14:55
Цитата Сообщение от EVOSandru6 Посмотреть сообщение
Разбираюсь с инклюдами и алгоритмом подключения файлов в CBuilder.
разбирайтесь с С++ и инклюдами/файлам/раздельной компиляцией, билдер тут не причем, это азы.

Добавлено через 1 минуту
Цитата Сообщение от EVOSandru6 Посмотреть сообщение
В файле Func.h подключаю Main.h , чтобы получить доступ к компонентам (компоненты форм и для работы с БД)
Тут ошибка.
1
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445
27.04.2015, 17:47  [ТС]
Что почитать на тему раздельной компиляции?

Если тут ошибка, то как вытянуть ресурс, дабы сделать возможным создание TObject экземпляра?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.04.2015, 18:55
Гоша и Яша а также Вика в помощь.
1
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445
28.04.2015, 08:17  [ТС]
Я так понял, что подключать Main.h нужно именно в Func.h , т.к. в Main юните(.cpp, .h) подключаются devexpress библиотеки и библиотеки элементов формы. А в Func.h инициализируются объекты с использованием классов данных библиотек.

Прочитал статью https://code-live.ru/post/sepa... on-cpp/#_3 - Тут рассматривается очень простой случай, когда без проблем сторонние .h файлы можно подключать из .cpp , но в моем случае необходимы указанные библиотеки. Или же впихнуть все библиотеко подключения из Main юнита в отдельный юнит и подключать его ив Main юните и в Func юните?!

Но.. пробовал копировать подключения к библиотекам из файла Main.h и вставлял их в Func.h , но вывалилось redeclaration, т.е. эти библиотеки все таки считались при подключении Main.h в Func.h
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.04.2015, 11:43
Лучший ответ Сообщение было отмечено EVOSandru6 как решение

Решение

Цитата Сообщение от EVOSandru6 Посмотреть сообщение
но в моем случае необходимы указанные библиотеки.
Библиотеки? Я не вижу библиотек, я вижу только хедеры, которые ты пытаешься подключить перекрестно и получаешь вероятно "рекурсию".

Разберись с этапами компиляции и с тем что происходит при компиляции, во что превращаются твои h и сpp

Более того твои попытки противоречат здравому смыслу, если ты выносишь что-то в отдельный юнит это означает что он должен быть максимально независим от всего другого, включать хедеры только те что нужно, а не все подряд.

Добавлено через 6 минут
Если используешь TObject то подключай System.hpp http://docwiki.embarcadero.com... em.TObject аналогично и другое
1
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445
28.04.2015, 11:59  [ТС]
Спасибо, немного с этими ошибками разрулил. Теперь подключаю нужные .h файлы в .cpp файлах
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2015, 11:59
Помогаю со студенческими работами здесь

Использовать внешнюю функцию ToString в наследнике класса TObject
Ребят, помогите плиз с прогой, не могу понять как исправить ошибку (104-106 строки): Extra parameter in call to _fastcall...

Обычный стринг, как путь к значениям массива, как сделать?
Привет всем. Хотел вытащить массивы, их очень много, и каждый прописывать в коде через конструкцию...

Как сделать идентичный обычный калькулятор Виндовса в делфи
Как сделать идентичный обычный калькулятор Виндовса в делфи, чтобы можно было вводить с цифровой клавиатуры знаки действия?

Может ли юнит-тест метода класса зависеть также от других методов?
Задавал уже точно такой же вопрос на другом форуме, но ответы там разнятся, поэтому хочется услышать мнение здешних форумчан. Если...

Как сделать процедуру (др. юнит), в которую будет вводится название StringGrid'а и она будет его заполнять?
Делаю класс и в нем одна из процедур должна выводить значения массива в таблицу. Как сделать чтобы при вызове этой процедуры (знаю что это...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru