IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Видимость переменных, С++ Builder
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Здравствуйте!
Такой вопрос возник..:
Есть две формы, соответственно, 2 модуля..
В 1-м модуле описана переменная, которая должна использоваться и во 2-м..
Для 1-го модуля:

#include <vcl.h>
#pragma hdrstop

#include "UnitMain.h"
#include "UnitKey.h"
#include "wincrypt.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMain *FormMain;

AnsiString pass;



Для 2-го:

#include <vcl.h>
#pragma hdrstop

#include "UnitKey.h"
#include "UnitMain.h"
#include "wincrypt.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormKey *FormKey;

void __fastcall TFormKey::ButOkClick(TObject *Sender)
{
pass=LabEdPas->Text;
}



В результате - ошибка, переменная pass не найдена..
Объясните пожалуйста, как исправить это?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






В header-файле для первого модуля опиши переменную, как внешнюю:
extern AnsiString pass;
, тогда линкер ее найдет.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


спасибо, получилось!

теперь схожая ситуация с использованием функции:
имеется проект с одним модулем UnitMain
к этому проекту через Add to project подключаю модуль (Unit2) из другого проекта. В Unit2 имеется процедура

void __fastcall TFormHem::ButEmcryptionClick(TObject *Sender)


которую нужно вызвать в UnitMain..
В UnitMain.h добавила

extern void __fastcall TFormHem::ButEmcryptionClick(TObject *Sender);



при запуске приложения ошибка:
[Linker Error] Unresolved external '__fastcall ButEmcryptionClick(System::TObject *)' referenced from E:\3_2 \ОБЩЕЕ\PROJECT\UNITMAIN.OBJ

Подскажите пожалуйста, как исправить ошибку?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
В UnitMain.h добавила
Не надо этого делать... Лучше добавь описание экземпляра класса (ну, или указателя на него), как extern. А то тип-то известен во втором файле, а название переменной - нет.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 16.05.2009 22:54) *

Не надо этого делать... Лучше добавь описание экземпляра класса (ну, или указателя на него), как extern. А то тип-то известен во втором файле, а название переменной - нет.

Не поняла.., о каком экземпляре класса идёт речь?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Как ты собираешься вызывать TFormHem::ButEmcryptionClick, не зная как называется переменная типа TFormHem? Вот по умолчанию форма называется Form1, хотя класс, ее описывающий называется TForm1. Здесь Form1 - имя экземпляра, а TForm1 - имя типа... Обратиться к контролу на форме (или к какому-то обработчику) можно только по имени экземпляра, то есть, ты должна написать Form1->Edit1..., а не TForm1::Edit1. Поэтому обычно указатель на форму описывается в хидере как extern TForm1 *Form1, и при подключении к другому модулю этого хидера можно обращаться к Form1->{что-то}

Почему у тебя этого не произошло (т.е., почему обращение к ButEmcryptionClick по имени ФОРМЫ а не КЛАССА невозможно) - я не знаю... Приводи проект, будем разбираться...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 5:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name