PDA

Просмотр полной версии : [С++ Builder6] Область видимости переменных [проблема]


nc.STRIEM
10.05.2008, 11:30
Вознила необходимасть создать форму, решил делать это под биджером, т.к. проще.
Столкнулся со следующей проблеммой.
Создаю файл var.h - в нем обявляю глобальные переменные.
Создаю 2е формы, и подключаю в них этот файл.
В первой форме инициализирую глобальную переменную из var.h во второй форме пытаюсь ее вывести. Дак вот значение переменной в первой и второй фоме не совпадают, как будто бы это вобще разные пеерменные

Kaimi
10.05.2008, 11:43
Да нормально все должно быть, покажи код

nc.STRIEM
10.05.2008, 12:02
http://taran.su/b.rar

z01b
10.05.2008, 12:31
Скачал я исходник, подумал немного и даже не знаю что сказать =(.
ЗЫ На Msvc++, этот метод пашет отлично.

nc.STRIEM
10.05.2008, 23:33
сказать можно одно - билдер хуяня, это не учитывая того сколько раз он зависает и глючит просто с нихуя

GlOFF
10.05.2008, 23:45
nc.STRIEM Согласен. У Borland и MS разные взгляды на работу, к каждой среде нужно привыкнуть и понять её... Что не ожидаешь и должно работать на MS у Borland ведет себя по другому..

Попробуй переменную обьявить в .cpp первой формы.

criz
10.05.2008, 23:48
А разве они не разные?
Вроде после выполнения работы с первой формой содержимое переменной "уничтожается" и поэтому вторая форма думает, что переменная пустая...
могу и ошибаться...не пинать :)
Попробуй переменную обьявить в .cpp первой формы.
или присвоить значение переменной в var.h

nc.STRIEM
10.05.2008, 23:52
А разве они не разные?
Вроде после выполнения работы с первой формой содержимое переменной "уничтожается" и поэтому вторая форма думает, что переменная пустая...
могу и ошибаться...не пинать :)

или присвоить значение переменной в var.h
предположим что разные. тогда как сделать та чтоб не уничтожалось?

Forcer
11.05.2008, 00:13
Страуструп: "Нет гарантированного порядка инициализации глобальных переменных из различных единиц трансляции.". Это не касается переменных, инициализированных константными выражениями, значения которых известны еще на стадии компиляции, и использование которых безопасно. Страуструп: "Существует несколько методов задания порядка инициализации глобальных переменных из отдельных единиц трансляции. Однако ни одна из них не является ни переносимой, ни эффективной. ... Часто функция,возвращающая ссылку, является хорошей альтернативой глобальной переменной. Например:"
int& use_count() {
static int uc = 0;
return uc;
}

Надеюсь, хоть чем-нибудь помог.

criz
11.05.2008, 00:23
А обязательно значение в cpp-файле присваивать? Нельзя в h-файл это перенести?

groundhog
13.05.2008, 11:47
На мой взгляд реакция вполне корректна... У тебя код получается в разных объектных файлах, и чтобы код из одного объектного файла мог получить доступ к переменной другого внешнего файла, тебе нужно эту переменную определить как внешнюю (с помощью ключевого слова extern). А вообще вариант черезпопный, лучше сделай структуру, которая инициализируется при выполнении функции main или WinMain, а в обработчики форм (или куда тебе надо?) передавай указатель на эту структуру, по которому код функций будет получать доступ к полям структуры через операцию разыменования по указателю (->).