Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для ijonhson
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584

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

20.01.2013, 02:44. Показов 3987. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru