Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 54

Использование переменной главной программы в unit

26.07.2016, 10:30. Показов 1732. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть главная программа:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
program main;
uses unit1;
var a : byte;
 
begin
a := 10;
for var i := 1 to 5 do 
 begin
  write(a);
  plus;
 end;
end.
Как видим, в ней описана переменная a : byte

Есть unit, в котором эта переменная должна использоваться

Pascal
1
2
3
4
5
6
7
8
unit unit1;
 
procedure plus;
begin
 a += 10;
end;
 
end.
Собственно вопрос: почему переменная, описанная в главной программе не может быть использована в unit? Ошибка при компиляции: Неизвестное имя 'a' (выделяет строку a += 10)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2016, 10:30
Ответы с готовыми решениями:

Использование переменной в разных частях программы
Добрый день, уважаемые форумчане! Извините за глупый вопрос, но самой разобраться не получилось. В программе имеются разные...

При отладке программы вылетает окошко с ошибкой: использование переменной без инициализации
код: #include <iostream> #include <conio.h> int A,n,m; using namespace std; void poisk1(); void poisk2(); int main() ...

Использование нескольких Unit
Доброго времени суток. У меня проблема, есть 2 Unit`а, оба подключены друг к другу, в Unit1 я могу использовать глобальные переменные,...

8
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
26.07.2016, 10:47
Pascal
1
2
3
4
5
6
7
8
unit unit1;
 
procedure plus(var a : byte);
begin
 a += 10;
end;
 
end.
Следовательно:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
program main;
uses unit1;
var a : byte;
 
begin
a := 10;
for var i := 1 to 5 do 
 begin
  write(a);
  plus(a);
 end;
end.
1
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
26.07.2016, 10:49
Pascal
1
2
3
4
5
6
7
unit unit1;
procedure plus(var a:byte);
begin
 a += 10;
end;
 
end.
Pascal
1
2
3
4
5
6
7
8
9
10
11
program main;
uses unit1;
var a : byte;
begin
a := 10;
for var i := 1 to 5 do 
 begin
  write(a,' ');
  plus(a);
 end;
end.
1
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
26.07.2016, 10:50
Описание переменной происходит после описания unit1.
Следовательно unit1 ни чего не знает о ней!
0
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 54
26.07.2016, 11:02  [ТС]
Ок, а если вызываемая процедура - обработчик клавиш OnKeyDown := KeyDownMainMenu? То как тогда использовать переменную главной программы в этом обработчике, который хранится в unit?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
26.07.2016, 11:09
Цитата Сообщение от X-TRACK Посмотреть сообщение
переменную главной программы
Не понятно что ли что модуль главнее самой главной программы?
Переменную или нужно объявлять в модуле или передавать как параметр подпрограмм.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
26.07.2016, 11:18
Цитата Сообщение от X-TRACK Посмотреть сообщение
как тогда использовать переменную главной программы в этом обработчике, который хранится в unit?
Никак. Это не предусмотрено возможностями языка, модули компилируются раньше, чем основная программа, и все то, что описано в в основной программе, для модулей недоступно, потому что неизвестно. Так что выходов у тебя всего два: либо описать переменную в модуле unit1, а не в основном блоке, либо сделать еще один модуль, там описать все "глобальные" переменные, и подключить его как к основной программе, так и к unit1.
0
0 / 0 / 0
Регистрация: 05.11.2015
Сообщений: 54
26.07.2016, 11:26  [ТС]
Решил описать переменную в unit, но после этого перестала вызываться OnKeyDown := KeyDownMainMenu. В чем проблема? Почему процедура не видит обработчик? Ошибка - Неизвестное имя 'KeyDownMainMenu'
Все происходит в одном unit:

Pascal
1
2
3
4
5
6
7
8
9
10
procedure MainMenuStartScreen;
begin
 UsedMenuPoint := false;
 repeat
  OnKeyDown := KeyDownMainMenu;
 until UsedMenuPoint = true;
end;
 
procedure KeyDownMainMenu(Key : integer);
...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
26.07.2016, 13:57
Полностью юнит покажи, а не куски непонятные. Заголовок KeyDownMainMenu в секции Interface описан? Или сама KeyDownMainMenu должна быть описана ВЫШЕ по тексту, чем MainMenuStartScreen, а не НИЖЕ, как в выдранном тобой куске показано.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2016, 13:57
Помогаю со студенческими работами здесь

USES unit и область видимости переменной
Привет. В разделе INTERFACE есть USES и там подключатся всякие модули. Недавно увидел что некоторые пишут USES в раздел...

Delphi 7 + Access. Использование переменных из другого unita (в Unit 1 из Unita3)
Общее условие задачи следующее: 1)На основе базы сделать форму с отображением данных из таблиц БД MS Acces; 2) сделать 2 кнопки: a)...

Использование имени метода/переменной, указанного в переменной String
public class Oll { String FishR = {"R","U","Rb","U","R","U","U","Rb"}; String FishL = {"Lb","Ub","L","Ub","Lb","U","U","L"}; ...

Java, unit-test. проверка на правильность программы
я новичок в программировании. Задача написать код где с консоли будет вводится какой либо массив чего либо и мне необходимо найти...

Unit тесты для программы считающей количество слов
Здравствуйте у меня есть программа которая считывает текст из файла и определяет сколько в нем слов состоящих из не более чем четырех букв...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru