0 / 0 / 0
Регистрация: 23.11.2019
Сообщений: 1
1

Bitmap^ в глобальной области

23.11.2019, 19:26. Показов 1433. Ответов 1
Метки нет (Все метки)

Пытаюсь объявить переменную в области класса. "Ошибка компилятора C3443 инициализатор элементов по умолчанию "zastavka::bmp" является рекурсивным. Строка Bitmap^ bmp = gcnew Bitmap(Xpix, Ypix);". Если перенести эти 3 строки в область события таймера, то происходит утечка памяти (быстро поднимается с 19 до 500 мб, далее срабатывает чистильщик), но при этом код работает.
Как можно решить проблему?

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
75
76
77
78
79
80
81
82
83
84
public: System::Void zastavka_Shown(System::Object^ sender, System::EventArgs^ e) {
        Xpix = int(pictureboxz->Width);
        Ypix = int(pictureboxz->Height);
        xM = Xpix / 2;
        yM = Ypix / 2;
        to4ka = 1;
        timer1->Enabled = true;
    }
        Bitmap^ bmp = gcnew Bitmap(Xpix, Ypix);
        Graphics^ g = Graphics::FromImage(bmp);
        Pen^ c = gcnew Pen(Color::Yellow, 4.0f);
    private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
        pictureboxz->Image = bmp;
        g->Clear(Color::PowderBlue);
        g->DrawEllipse(c, xM, yM, 40, 40);
        pictureboxz->Refresh();
        switch (to4ka) //точка к которой стремится шар 
        {
        case 1: //низправо
        {
            yM += 1;
            xM += 1;
            if (xM >= (Xpix - 40))
            {
                to4ka = 3;
                Beep(1000, 3);
            }
            if (yM >= (Ypix - 40))
            {
                to4ka = 2;
                Beep(1000, 3);
            }
            break;
        case 2: //верхправо
        {
            xM += 1;
            yM -= 1;
            if (xM >= (Xpix - 40))
            {
                to4ka = 4;
                Beep(1000, 2);
            }
            if (yM <= 0)
            {
                to4ka = 1;
                Beep(1000, 2);
            }
        }
        break;
        case 3: //низлево
        {
            yM += 1;
            xM -= 1;
            if (xM <= 0)
            {
                to4ka = 1;
                Beep(1000, 2);
            }
            if (yM >= (Ypix - 40))
            {
                to4ka = 4;
                Beep(1000, 2);
            }
        }
        break;
        case 4: //верхлево
        {
            xM -= 1;
            yM -= 1;
            if (xM <= 0)
            {
                to4ka = 2;
                Beep(1000, 2);
            }
            if (yM <= 0)
            {
                to4ka = 3;
                Beep(1000, 2);
            }
        }
        break;
        }
        }
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2019, 19:26
Ответы с готовыми решениями:

Как обьявить статические поля класса в глобальной области?
У класса есть статическое поле, определение должно находиться за пределами объявления класса. Как...

Как создать bitmap из области (по координатам пикселей) другого bitmap
Здравствуйте. Подскажите пожалуйста как создать bitmap из области(по координатам пикселей) другого...

Действия в глобальной области
Здравствуйте! Скажите, пожалуйста, почему в глобальной области нельзя работать также, как в...

Видимость констант из глобальной области внутри класса
#include &lt;iostream&gt; //stack struct struct node; struct node { int* val; node* prev;...

1
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 831
23.11.2019, 22:08 2
Лучший ответ Сообщение было отмечено lankart как решение

Решение

C++
1
2
3
4
5
6
7
Bitmap^ bmp;
.....
public: System::Void zastavka_Shown(System::Object^ sender, System::EventArgs^ e) 
{
        Xpix = int(pictureboxz->Width);
        Ypix = int(pictureboxz->Height);
        bmp = gcnew Bitmap(Xpix, Ypix);
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2019, 22:08

Увеличение значения переменной, обявленной в глобальной области
Начал изучать CUDA, т. к. надо пистаь курсач... И вот у меня появился вопрос. Допустим я выделил в...

Определение Blowfish ключа в глобальной области - магия
В общем либо у меня кривая реализация либо я чего то не знаю, но если определить ключ как...

Стоит ли держать загруженные модели в глобальной области видимости?
Есть модели, которые редко изменяются (только админом по праздникам), но которые постоянно...

Использование объекта mysqli из глобальной области внутри функций
использую mysqli за место mysql иначе скрипт кричит что mysql устарело, подключаю таким образом ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.