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

Как обращаться к форме из стороннего юнита?

24.04.2015, 12:10. Показов 1708. Ответов 6
Метки нет (Все метки)

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

У меня есть 2 юнита: Main.cpp и Func.cpp , у каждого внутри есть одноименный .h файл.

В указанных .h файлах я сделал связку между юнитами:

1)
C++
1
#include "Main.h"
- в файле Func.h
2)
C++
1
#include "Func.h"
- в файле Main.h

В Main unit есть форма "MainForm"

В одной из функций Func unit есть обращение к данной форме:
...
C++
1
MainForm->firmaGBox->Visible = false;
...

Выпадает ошибка в этом месте:

[BCC32 Error] Func.h(42): E2451 Undefined symbol 'MainForm'

В чем может быть причина?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.04.2015, 12:10
Ответы с готовыми решениями:

Как обращаться к программно создаваемой форме
Подскажите пожалуйста. Есть код - создание формы: procedure TForm1.Button1Click(Sender: TObject); begin; Form2:=...

Как обращаться к форме в другом проекте?
Ситуация такая: Есть Project1 и у него есть Form1. Есть Project2 с Form2. Оба проекта в одном решении. Как мне в коде...

Как в firefox обращаться к форме, расположеной в соседнем фрейме?
в общем есть страничке, на ней 2 iframe в первом iframe есть форма. када она отправвляется обноляется 2-й iframe а при обновлении...

6
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
24.04.2015, 12:29
Цитата Сообщение от EVOSandru6 Посмотреть сообщение
- в файле Func.h
2)Код C++1
#include "Func.h"
Здесь надо добавить
C++
1
#include "Main.h"
И если быть точным то лучше добавлять связку не в h-файлы, а в cpp-файлы

Добавлено через 3 минуты
т.е должно быть так в Func.cpp
C++
1
2
#include "Func.h"
#include "Main.h"
1
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445
24.04.2015, 12:30  [ТС]
Если в Main.h добавить include на самого себя?!

Уточню.

Main - это Vcl Forms Application

А Func - простой unit
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
24.04.2015, 12:32
А в Main.cpp должно быть так

C++
1
2
#include "Main.h"
#include "Func.h"
1
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445
24.04.2015, 12:42  [ТС]
C++
1
#include "Func.h"
У меня было в Main.h

Сделал, как ты сказал, но ничего не изменилось.

Пробовал подключение в разных комбинациях. (#include "Func.h"
)

По отдельности из Main.cpp и Main.h , а также из обоих сразу.

В любом случае вышеупомянутая ошибка.
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
24.04.2015, 12:48
Лучший ответ Сообщение было отмечено EVOSandru6 как решение

Решение

А ты в проект добавил модуль Func.h и Func.cpp?
1
4 / 4 / 6
Регистрация: 23.05.2012
Сообщений: 445
24.04.2015, 13:01  [ТС]
Да они есть, дело оказалось в очередности подключений:

Цитата Сообщение от monah_tuk
У вас, ещё и Header guard, небось, есть? Или #pragma once?

Изучите как работает препроцессор и что они делает, когда встречает директиву #include.

По вашей проблеме:
Func.cpp подключает Func.h (определяется охранник FUNC_H /какой точно у вас - я не знаю/, теперь файл повторно не включится), тот, в свою очередь, подключает Main.h (MAIN_H), Main.h подключает Func.h, но охранник уже есть, поэтому игнорируется. Из текста ошибки следует, что не смог подключиться Main.h, т.к. был определён охранник MAIN_H, попробую возомнить себя телепатом, но, скорее всего, в Func.cpp у вас сначала инклудится Main.h, а потом Func.h, что и приводит к такому поведению.

Собственно, вам уже должно стать понятно, что без листингов этих файлов делать заключение очень проблемно. Ровно как и оказать посильную помощь.

А вообще, золотое правило: избегайте cross-reference заголовочных файлов. Подключайте нужные только в единицы трансляции. Используйте forward-declaration где нужно. Скрывайте детали реализации через PIMPL (гугл в помощь).

Спасибо за отклик Sasha!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.04.2015, 13:01
Помогаю со студенческими работами здесь

Как обращаться с одной формы к DGV, находящемуся на другой форме
Здравствуйте, подскажите как обращаться с одной формы к датагриду находящемуся на другой форме, добавлять новые элементы. Скажем...

Почему к главной форме можно обращаться как к статическому классу из любого места программы
Почему к главной форме Form1 можно обращаться как к статическому классу из любого места программы? Это требует дополнительного кода или...

Обращаться к форме и ее компонентам из другого класса
Здравствуйте. Как можно обращаться к форме и ее компонентам из другого класа или есть другой способ уменьшения кода в классе форме?

Открытие стороннего приложения в форме
Как можно сделать открытие стороннего приложения в программе. Суть: есть форма, кнопка, стороннее приложение. Как сделать так, чтобы при...

Как ограничить поворот юнита?
У меня юнит поворачивается с помощью transform.LookAt(myTransform); Как сделать, так чтобы юнит мог быть повёрнут только на 90, 180, 360...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru