Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к переменной другой формы, Переменная объявляется в ".cpp" 
:(
    Опции темы
HyugaNeji
Дата 6.8.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.6.2008

Репутация: нет
Всего: нет



Привет. 
Ситуация такая:
Есть форма f1 и форма f2.
Как получить доступ из f2 к переменной  "а" формы f1 , объявляя при этом "а" в файле реализации ".cpp".
Пробывал через экстэрн, и через стрелку  - через стрелку он невидит, а через экстэрн почему то создаётся другая переменная (
Хэлп плиз.

Добавлено через 7 минут и 37 секунд
Cори люди. Я случайно создал 2 одинаковой темы из-за глюка в браузере ( А как удалить незнаю. Если кто может удалите одну плз.
PM MAIL   Вверх
kefir01
Дата 6.8.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



в одной, только не cpp а h
Код

extern AnsiString xx;

 
а в другой cpp
Код

#define xx Newname;


PM MAIL   Вверх
mrbrooks
Дата 7.8.2008, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(kefir01 @ 6.8.2008,  21:55)
в одной, только не cpp а h
Код

extern AnsiString xx;

 
а в другой cpp
Код

#define xx Newname;

Достаточно своеобразный метод. smile 

По теме: 
можно конечно через extern
Код

//модуль 1
int a = 55;
//модуль 2
extern int a;

но как известно глобальные переменные зло. поэтому рекомендую в твоем случае имхо описать переменную в классе формы 1 в разделе public. из второго модуля ты сможешь ее вызвать уже как формы 1->переменная. разумеется надо  подключить юниты друг к другу smile 
PM MAIL   Вверх
Jorjio
Дата 7.8.2008, 18:33 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 20.5.2008
Где: г. Москва

Репутация: нет
Всего: нет



Цитата

f1.h

#ifdef f1 //если f1 определено
  #define EXT_a //вместо EXT_a пустышка
#else //если f1 не определено
  #define EXT_a extern // вместо EXT_a extern  
#endif

EXT_a int  a; //соответственно extern int a или int a  


Цитата

f1.cpp

#define f1
#include f1.h

// поскольку  f1 - определено то в этом модуле переменная будет иницилизирована


Цитата

f2.cpp

#include f1.h

// поскольку  f1 - не определено то в этом модуле переменная будет объявлена с модификатором extern 


PM MAIL ICQ Skype   Вверх
HyugaNeji
Дата 8.8.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 28.6.2008

Репутация: нет
Всего: нет



Спасибо зао ответы. Но мне нужно их объявить вообще без участия ".h".
Дело в том что я пытаюсь объявить указатель на форму. Если я обхявляю её в ".h" то программа пытается вызвать указатель на форму которую ещё не подгрузил через инклуд. Поэтому я хочу обхявлять её в ".cpp".
Просто я объявляю в других формах инклудом первую форму, а в ".h" первой формы создаются указатели на другие формы. Вот так получается что загружается первая форма, подгружает вторую форму, вторая пытается подгрузить первую, в уже идёт объявление на указатель третьей формы, а её ещё не загружали.
Надеюсь понятно написал.
Вобщем ".h" вообще не должно учавствовать.
PM MAIL   Вверх
mrbrooks
Дата 8.8.2008, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



тогда только extern либо синглетон, либо независымый класс со статическими переменными. но думаю первый вариант будет предпочтительней и легче для тебя имхо.
PM MAIL   Вверх
Jorjio
Дата 8.8.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 20.5.2008
Где: г. Москва

Репутация: нет
Всего: нет



Цитата

Дело в том что я пытаюсь объявить указатель на форму. 


Что-то я туплю, ничего не понимаю.
Вопрос о динамически создаваемой форме?

Зачем объявляешь её в .h.

f1.cpp

#define f1
#include f1.h
#include f2.h

....................................................
{
TForm *Form2;
Form2 = new TForm(this);
Form2 -> Show();
}


Что-то типа того что-ли?
PM MAIL ICQ Skype   Вверх
dasknix
  Дата 13.11.2009, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Вопрос о видимости в разных код-модулях (файлах .cpp), только
касается ф-ций-членов класса формы.

Есть MainForm. В нём объявляется следующее:

Код

class TfrmMain : public TForm
{
__published:    // IDE-managed Components
...
    void __fastcall FormCreate(TObject *Sender);
...
private:    // User declarations
    void ClosePage();
public:        // User declarations
    __fastcall TfrmMain(TComponent* Owner);
    void SwitchUI2HC();
};


Вопрос: как сделать определение (подчёркиваю - не объявление, а опр.FormCreate(); в другом файле?..

Решил делать так:
(UIAutomation - мой модуль кода)

[UIAutomation.cpp]
#include "UIAutomation.h"
#include "MainForm.h"

void __fastcall TfrmMain::FormCreate(Tobject *Sender)
{
    // blah-blah-blah..
}

Пилятар говорит что TfrmMain::FormCreate не есть член TfrmMain, интересно - почему,
я уже пробовал переносить из __published в public (в объявлении класса формы), но это
ничего не изменило, пробовал линковать кроссом .h (что по сути глупость, но мне нервы
дороже -> чисто для патча совести сделал..)

Где моя глупость и тренировать ли мышцы для общения с Embarcadero'вским суппортом?

PS имхо нужно создать FAQ по С++ Builder, ибо (у меня, к примеру, при желании написать
нормальный быстрый+полноценный win32-софт) возникает масса затруднений, которые
не всегда можно преодалеть простым перечитыванием манов, затем форума, затем msdn,
затем скрижали собственной кармы (e.g. "i'm L, isn't it?..")

 smile  smile  smile  smile  smile  smile  smile  smile  smile  smile    smile 

Это сообщение отредактировал(а) dasknix - 13.11.2009, 04:44
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1116 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.