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

Добрый день,

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

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

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

#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 , чтобы получить доступ к компонентам (компоненты форм и для работы с БД)

#ifndef FuncH
#define FuncH
#include "Main.h"

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

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 в этом же файле:

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

Я так понял, что подключать Main.h нужно именно в Func.h , т.к. в Main юните(.cpp, .h) подключаются devexpress библиотеки и библиотеки элементов формы. Помогите пожалуйста, в чем причина может быть и где я ошибаюсь.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.