Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584

Области видимости в Builder

20.01.2013, 02:44. Показов 4196. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Совсем запутался с областью видимости
описываю класс-в том же модуле из обработчика событий кнопки его не видно
создаю модуль-из него не видно форму которая используется в функциях класса(она находится в другом модуле)
ткните пож. пальцем хоть что почитать (книга глава)

Добавлено через 40 минут
даже если я подключаю модуль с формой через include он мне пишет что компонент не является частью формы

Добавлено через 1 час 7 минут
cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
   #include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
#include <Unit1.h>
 
 
//---------------------------------------------------------------------------
 
#pragma package(smart_init)
 
 
 
             void stvorka::stvfun()
             {
                  z=y2/2;
                  xa1=x1+gap;
                  xa2=x2-gap;
                  ya1=y1+gap;
                  ya2=y2-gap;
 
  Form1->Image1->Canvas->Pen->Color=(TColor)RGB(99,212,197);
  Form1->Image1-> Canvas->Pen->Width=1;
  Form1->Image1->Canvas->MoveTo(x1,y1);
  Form1->Image1->Canvas->LineTo(x2,y1);
  Form1->Image1->Canvas->LineTo(x2,y2);
  Form1->Image1->Canvas->LineTo(x1,y2);
  Form1->Image1->Canvas->LineTo(x1,y1);
  Form1->Image1->Canvas->MoveTo(xa1,ya1);
  Form1->Image1->Canvas->LineTo(xa2,ya1);
  Form1->Image1->Canvas->LineTo(xa2,ya2);
  Form1->Image1->Canvas->LineTo(xa1,ya2);
  Form1->Image1->Canvas->LineTo(xa1,ya1);
  Form1->Image1->Canvas->MoveTo(x1,y1);
  Form1->Image1->Canvas->LineTo(xa1,ya1);
  Form1->Image1->Canvas->MoveTo(x2,y1);
  Form1->Image1->Canvas->LineTo(xa2,ya1);
  Form1->Image1->Canvas->MoveTo(x2,y2);
  Form1->Image1->Canvas->LineTo(xa2,ya2);
  Form1->Image1->Canvas->MoveTo(x1,y2);
  Form1->Image1->Canvas->LineTo(xa1,ya2);
   if (leftrigth==0){
  Form1->Image1->Canvas->MoveTo(xa2,ya1);
  Form1->Image1->Canvas->LineTo(xa1,z);
  Form1->Image1->Canvas->LineTo(xa2,ya2);
}
 if (leftrigth==1){
  Form1->Image1->Canvas->MoveTo(xa1,ya1);
  Form1->Image1->Canvas->LineTo(xa2,z);
  Form1->Image1->Canvas->LineTo(xa1,ya2);
}
 
                  }
 
      void rama::ramafun()
      {
                  xa1=x1+gap;
                  xa2=x2-gap;
                  ya1=y1+gap;
                  ya2=y2-gap;
       Image1->Canvas->Pen->Color=(TColor)RGB(99,212,197);
       Form1->Image1-> Canvas->Pen->Width=1;
       Form1->Image1->Canvas->Rectangle(x1,y1,x2,y2);
       Form1->Image1->Canvas->Rectangle(xa1,ya1,xa2,ya2);
       Form1->Image1->Canvas->MoveTo(x1,y1);
       Form1->Image1->Canvas->LineTo(xa1,ya1);
       Form1->Image1->Canvas->MoveTo(x2,y1);
       Form1->Image1->Canvas->LineTo(xa2,ya1);
       Form1->Image1->Canvas->MoveTo(x2,y2);
       Form1->Image1->Canvas->LineTo(xa2,ya2);
       Form1->Image1->Canvas->MoveTo(x1,y2);
       Form1->Image1->Canvas->LineTo(xa1,ya2);
 
      }
.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//---------------------------------------------------------------------------
 
#ifndef Unit2H
#define Unit2H
class stvorka
 {
 private:
              int xa1,xa2,ya1,ya2,z;
      public:
             int x1,x2,y1,y2,leftrigth,gap;
             public:
             void stvfun();
             };
             class rama
      {
      private:
      int xa1,xa2,ya1,ya2;
      public:
      int x1,x2,y1,y2,gap;
      public:
          void ramafun();
      };
//---------------------------------------------------------------------------
#endif
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2013, 02:44
Ответы с готовыми решениями:

Области видимости в Builder part2
В продолжение темы про https://www.cyberforum.ru/cpp-builder/thread766700.html Завела меня в тупичок следующая ситуация: на отдельном...

Области видимости
Если я запихиваю любые операции (в данном случае задание и заполнение массива); То далее не видит, не то что не заполненный массив, а...

Области видимости функций
Добрый день. Написал класс, помогите найти ошибки #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; using...

27
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
26.01.2013, 09:35
Студворк — интернет-сервис помощи студентам
после
C++
1
meter==220
или после
C++
1
meter=220
это разные вещи
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
27.01.2013, 00:47  [ТС]
спасибо насчёт присваивания и сравнения в курсе в тексте программы везде присваивание вот проект
не плюйтесь пож. когда читать будете я вудь только учусь
переменная meter меняется функцией impostfunc.Если вывод значения meter на label поместить в любом другом месте программы то без проблем на label отображается значения meter,а вот если в обработчик события то meter всегда равен значению при инициализации
Вложения
Тип файла: rar Новая папка.rar (878.6 Кб, 9 просмотров)
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
27.01.2013, 02:24  [ТС]
С проблемой я справился, вместо того чтоб писать функцию в обработчике события написал вне а из обработчика просто вызвал её но пугает непонимание происходящих процессов
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
27.01.2013, 04:16
Глобальные переменные надо определять в cpp файле (а вообще их быть не должно). Вместо класса active можно использовать стандартный класс TRect. Узнайте что такое инкремент и дикремент (++, --) и что такое +=, -=, *=, /= . Не плохо писать комментарии, что делает каждая ф-ция и метод, что это за класс, что за свойство. Называть Image как А плохо лучше Image1 или ImageMain или ImgMain, что то говорящее, иначе потом сами забудете что делает куча безликих переменных. И как ранее уже говорил неправильная идеология, классы определенные в Unit2 не должны знать что такое Form1, а если вы завтра захотите отрисовывать свои окна не на Form1->A->Canvas, а скажем еще и на Form2->Canvas, что вы будете делать со своим кодом? Т.е. в этих классах должна быть переменная TCanvas* в которую они и должны рисовать, а сама переменная должна задаваться из вне при создании класса или вызове его методов.
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
27.01.2013, 10:41  [ТС]
спасибо это всё понятно но это мелкие ошибки с которыми программа всё таки будет работать хотя учиться лучше начинать конечно же исключая эти ошибки.
Что касается инкремента и дикремента так это дело привычки по чуть чуть буду привыкать суть то не менятся.
В конце концов разобрался я в своих ошибках ключевое слово всех ошибок extern
при включении модулей с помощью #include создаются копии переменных с теми же именами а не включаются в модуль оригиналы соответственно компилятор и не ругается дескать undefained simbol тут то я и застрял окончательно.
послали бы меня на три WWW:http://selfteacherc-builder.ne... 20function
Туда же предлагаю сходить и всем у кого возникли вопросы такого рода

Добавлено через 2 часа 9 минут
А запутался я ещё и потому что при включении другого модуля директивой #include у меня работало обращение к компонентам,но опять же одно дело копия переменной а совсем другое копия указателя.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
27.01.2013, 12:08
Цитата Сообщение от ijonhson Посмотреть сообщение
но опять же одно дело копия переменной а совсем другое копия указателя.
Нет, разницы между любой переменной и указателем в этом плане нет никакой. Просто указатели на формы объявлены именно как extern.
0
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
28.01.2013, 13:54  [ТС]
Копия указателя указывает на тот же адрес в памяти что и оригинал указателя,то есть при обращении к адресу памяти через указатель значение записанное по указанному адресу одинаковое и для оригинала и для копии указателя,если через копию указателя изменить значение "ячейки" в памяти,то обратившись к этой "ячейке" через оригинал указателя вы получите изменённое значение и наоборот.
С копией переменной ситуация немного другая.Оригинал (к примеру int var)в модуле Unit1 живёт независимой жизнью от копии которую создаёт компилятор при использовани директивы #inlude "Unit1.h" в модуле Unit2.То есть если в модуле Unit1 по ходу программы var меняет значение то оно будет отлично от значения var в модуле Unit2.
Директива #include создаёт копии без использовании extern специально прочитал несколько статей на эту тему даже вот пример выкладываю
Вложения
Тип файла: rar пример.rar (6.1 Кб, 3 просмотров)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.01.2013, 15:45
Какая феноменальная чушь!
Указатели не надо путать со ссылками - у них есть серьезное отличие. Указатели инициализированными не рождаются, а становятся. Соответственно, чтобы воссоздать описанный тобой расклад, придется одинаково и явно инициализировать все копии указателей.
Еще раз повторю - автоматически созданные средой указатели на формы существуют в единственном экземпляре. Объявлены они в глобальной области видимости в соответствующем модуле .cpp и переобъявлены со спецификатором extern в соответствующем хедере.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.01.2013, 15:45

Изменение области видимости функции
Здравствуйте, имеется вопрос по наследованию: Пусть имеется некоторый класс A c функцией func class A { ... Public: int...

Инициализация вне области видимости
Здравствуйте! Работаю над деревом, в котором есть две структуры: struct file { public: string name; //имя string...

Классы, наследование, области видимости
A.h: #ifndef A_H #define A_H #include &quot;C.h&quot; class C; class A { private:

Оператор разрешения области видимости
Только начинаю изучать ООП. Объясните где и как применяется оператор разрешения области видимости.

Какие есть области видимости в C++?
Добрый день. Что влияет на видимость идентификаторов в коде? Пока мне удалось найти информацию о видимости: членов класса:...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru