Глобальные переменные

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Глобальные переменные

Сообщение delimer » 11.02.2010 22:49:31

Есть программа вида:

Код: Выделить всё
program test;

uses
   ...,
  unit1;

var
  ...;
  test:string;

begin
   test:='test';
end.


и модуль:

Код: Выделить всё
unit unit1;

interface

uses
  ...,
  ...;

procedure proc1(a:integer);
...;

implementation

procedure proc1(a:integer);
begin
   test:='123'; // тут выдает ошибку компиляции identifire not found
end;

end.


в делфи переменная тест была глобальной и можно было к ней обращаться в модулях, после переноса на лазарус выдает ошибку identifire not found. может что в настройках проекта или компиляции надо еще указать?
Аватара пользователя
delimer
незнакомец
 
Сообщения: 2
Зарегистрирован: 11.02.2010 20:49:44

Re: Глобальные переменные

Сообщение Reyko » 11.02.2010 22:59:58

delimer
У меня была такая проблема, решила тем, что создала отдельный модуль с описанием глобальных переменных и констант. Если не получиться настроить лазарус как надо, то это решение должно помочь.
P.S.:Кстати, если, все же настроишь лазарь, отпишись пожалуйста.
Reyko
новенький
 
Сообщения: 15
Зарегистрирован: 05.11.2009 23:48:12
Откуда: Магнитогорск

Re: Глобальные переменные

Сообщение Mr.Smart » 11.02.2010 23:07:54

delimer
Если вы добавляете модуль с объявлением глобальной переменной в любой другой в секцию uses, то данная переменная будет доступна и в этом модуле. Не знаю, что там в последних Дельфях придумали, но это спаведливо для стандарта языка Pascal!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Глобальные переменные

Сообщение alexrayne » 12.02.2010 00:48:47

да нет, как раз как я понял, автор поста запользовл какуюто фичу дельфей которая поперек стандарта паскаля и вообще как телега как телега впереди лошади. я такое впринципе делаю на С, но и там надо както дать понять модулю, что есть такая глобальная переменная тест, в хеадере ето обычно делается.
тот пример который вы указали, я даже непонимаю как вообще компилятор может его компилить. что он должен использовать в качестве test при компиляции модуля? как я понимаю дельфа аутоматично подключает в uses модуль основной программы, но ето скрытая фича именно дельфи и она в стандарте реализована быть неможет.
alexrayne
постоялец
 
Сообщения: 125
Зарегистрирован: 03.12.2008 16:56:26

Re: Глобальные переменные

Сообщение alexs » 12.02.2010 02:04:06

Если это так, то это полный бред! Весь базис паскаля основан на том, что перед тем что что-то использовать надо это объявить! А тут наоборот...
вобщето когдато был такой TMT паскаль, в нём подобная фишка была - но там надо было подключать основной модуль программы как обычный юнит (оно это хавало). В общем - маразм! Правильно проектируйте программы - и такого ... не надо будет делать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глобальные переменные

Сообщение delimer » 12.02.2010 13:14:06

Спасибо за ответы. Решил все это вынесением переменных в модуль. До этого писал все время на делфи и привык применять такие переменные (про то, что это не предусмотрено стандартом паскаля даже и не знал).
Аватара пользователя
delimer
незнакомец
 
Сообщения: 2
Зарегистрирован: 11.02.2010 20:49:44

Re: Глобальные переменные

Сообщение Андрей Головин » 13.02.2010 12:26:45

Если имя модуля совпадает с именем переменной как в примере, обращаться к ней из других модулей надо как test.test
Это немного не о том, но сам недавно споткнулся, может пригодится при переносе переменных в модуль.
Андрей Головин
незнакомец
 
Сообщения: 2
Зарегистрирован: 13.10.2005 18:24:15

Re: Глобальные переменные

Сообщение SAK » 14.02.2010 18:24:47

delimer писал(а):... До этого писал все время на делфи и привык применять такие переменные ...

Если не секрет какой версии Delphi? В Delphi 7 такое точно не проходит.
SAK
постоялец
 
Сообщения: 158
Зарегистрирован: 18.02.2006 00:45:14
Откуда: Тим

Re: Глобальные переменные

Сообщение TimK » 16.02.2010 16:32:21

Вы обращаетесь из unit1 к переменной основного модуля программы. Это нельзя делать ни в дельфе не в FPC, ни в прочих паскалях. И с настройками лазаруса это никак не связано - нет таких. На самом деле ваша переменная не глобальная, а локальная переменная процедуры PascalMain - точки входа программы. Задекларируйте ее в unit1, в основном модуле она будет тоже видна ибо он (unit1) есть в uses. PS: пределах модуля нельзя декларировать имена совпадающие с его именем.
TimK
новенький
 
Сообщения: 16
Зарегистрирован: 13.01.2010 06:26:49


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48

Рейтинг@Mail.ru