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

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

20.01.2013, 02:44. Показов 4241. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru