Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для ExeiLj
13 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 128

Общий класс для разных модулей

13.05.2013, 13:37. Показов 1593. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожайлуста, как мне правильно использовать один класс для разных Unit'ов.

Unit1_Main.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
//---------------------------------------------------------------------------
#ifndef TCUnit1_MainH
#define TCUnit1_MainH
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
 
#include <IdBaseComponent.hpp>
#include <IdComponent.hpp>
#include <IdTCPClient.hpp>
#include <IdTCPConnection.hpp>
//---------------------------------------------------------------------------
class TFormTClient : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TButton *Button2;
    TEdit *Edit1;
    TEdit *Edit2;
    TEdit *Edit3;
    TMemo *Memo1;
    TIdTCPClient *IdTCPClient1;
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall Button2Click(TObject *Sender);
    void __fastcall Connected(TObject *Sender);
    void __fastcall Disconnected(TObject *Sender);
private:    // User declarations
public:     // User declarations
    void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
    void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
    __fastcall TFormTClient(TComponent* Owner);
};
 
class TC
{
    public:
        void Connect(String host, int port);
        void Disconnect();
} *TC;
//---------------------------------------------------------------------------
extern PACKAGE TFormTClient *FormTClient;
//---------------------------------------------------------------------------
#endif
Хочу использовать класс TC в другом Unit - просто подключаю, делаю include и все работает.
Unit2.cpp
C++
1
2
#include "TCUnit2.h"
#include "TCUnit1_Main.h"
НО появляется предупреждение [ILINK32 Warning] Warning: Public symbol '_TC' defined in both module ...\TCUNIT1_MAIN.OBJ and ...\TCUNIT2.OBJ

Что не так?

Добавлено через 1 час 14 минут
Разобрался:
надо убрать указатель *TC из заголовочного файла (.h);
и описать в cpp файлах "TC *TC;". У второго юнита с extern.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2013, 13:37
Ответы с готовыми решениями:

Как можно создать общий класс для разных типов?
как можно создать общий класс для разных типов переменной name (Int32, Double, DateTime, пользовательский класс) public class...

Общий Id для разных моделей
Всем приветик! В процессе написания своего проекта столкнулась с такой проблемой: Есть база данных. Она общая для 3 видов товаров:...

Общий хостинг для разных заказчиков
Поделитесь опытом - вы объединяете разных заказчиков на один хостинг? Многие хостинг предлагают хорошие тарифы, если ты создаешь несколько...

8
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
15.05.2013, 10:25
Цитата Сообщение от ExeiLj Посмотреть сообщение
и описать
не. нужно было написать
C++
1
extern TC *TC;
в заголовке. а
C++
1
TC *TC;
в модуле к которому идет этот заголовок. сравните например с FormTClient
0
 Аватар для ExeiLj
13 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 128
16.05.2013, 11:39  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
нужно было написать
C++
1
extern TC *TC;
в заголовке.
Так можно и не делать. Например если не хотите, чтобы этот класс виделся в некоторых юнитах.
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
16.05.2013, 12:20
Цитата Сообщение от ExeiLj Посмотреть сообщение
Так можно и не делать
можно и заголовками не пользоваться, но смысл такого изврата?
0
 Аватар для ExeiLj
13 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 128
16.05.2013, 14:13  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
можно и заголовками не пользоваться, но смысл такого изврата?
Не знаю, просто так можно
Я то - да, пользуюсь как вы сказали. Только пишу еще PACKAGE (как у TForm), или его не стоит писать?

Кстати класс нельзя сделать extern'ом нигде, кроме заголовка
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
16.05.2013, 16:22

Добавлено через 2 минуты
Убери объявление *TC из хедера...
C++
1
2
3
4
5
6
class TC
{
    public:
        void Connect(String host, int port);
        void Disconnect();
} ;
0
 Аватар для ExeiLj
13 / 13 / 3
Регистрация: 02.08.2012
Сообщений: 128
17.05.2013, 02:31  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение

Добавлено через 2 минуты
Убери объявление *TC из хедера...
C++
1
2
3
4
5
6
class TC
{
    public:
        void Connect(String host, int port);
        void Disconnect();
} ;
Цитата Сообщение от ExeiLj Посмотреть сообщение
НО появляется предупреждение [ILINK32 Warning] Warning: Public symbol '_TC' defined in both module ...\TCUNIT1_MAIN.OBJ and ...\TCUNIT2.OBJ

Что не так?

Добавлено через 1 час 14 минут
Разобрался:
надо убрать указатель *TC из заголовочного файла (.h);
и описать в cpp файлах "TC *TC;". У второго юнита с extern.
:-)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
17.05.2013, 02:34
Цитата Сообщение от ExeiLj Посмотреть сообщение
У второго юнита с extern.
Плохая идея ... плохая идея использовать глобальные объекты ...
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
17.05.2013, 09:28
Цитата Сообщение от Avazart Посмотреть сообщение
плохая идея использовать глобальные объекты
но иногда это делается. в коде пока не видно засилья таких объектов позволяющих сделать вывод что пора звать врача
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2013, 09:28
Помогаю со студенческими работами здесь

Два файла css для разных модулей на одной страничке
Столкнулся с таким нюансом: На страничку средствами php подключается несколько блоков, каждый из которых имеет свой css файл. В результате...

Как создать общий список с разных типов данных для 2 потомков?
Есть базовый абстрактный класс и 2 потомка. Как создать общий список с разных типов данных для 2 потомков?

Общий класс для двух проектов
Простейший вопрос. Есть, допустим, файл f.java: package f; public class F { public void Func() {} } И есть еще два...

Zend Для разных модулей разный layout (Zend framework 1.x)
Конструкция: /application/layouts/scripts/layout.phtml (для всего проекта) /application/modules/admin/admin.phtml (для модуля admin)...

сделать класс-завод, который собирает из разных двигателей, колес и кузовов автомобили разных марок
Добрый день всем!Я только начинаю)))вижу это затертая фраза.Возможно у кого нибудь есть возможность помочъ .Заранее премного балгодарен. ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru