@EVOSandru6

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

Добрый день!

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

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

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

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

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

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

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

В чем может быть причина?
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@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 (гугл в помощь).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы