Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sevename
0 / 0 / 0
Регистрация: 25.07.2015
Сообщений: 4
#1

обращение к элементу массива (массив как поле класса) - C++

01.02.2016, 18:04. Просмотров 328. Ответов 4
Метки нет (Все метки)

есть класс с массивом[RGB, x, y]
C++
1
2
3
4
5
6
7
8
9
10
11
12
class ArrayPixel
{
public:
    byte*** pixel;
    
    ArrayPixel(int, int);
    ~ArrayPixel(void);
 
private:
    int _width;
    int _height;
};
ArrayPixel.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
ArrayPixel::ArrayPixel(int width, int height)
{
    _width = width;
    _height = height;
 
    byte*** pixel = new byte** [3];
    for (int rgb = 0; rgb < 3; rgb++)
    {
        pixel[rgb] = new byte* [_width];
        for (int x = 0; x < _width; x++)
            pixel[rgb][x] = new byte [_height];
    }
 
}
 
ArrayPixel::~ArrayPixel(void)
{
    for (int rgb = 0; rgb < 3; rgb++)
    {
        for (int x = 0; x < _width; x++)
            delete [] pixel[rgb][x];
        delete [] pixel[rgb];
    }
    delete [] pixel;
}


проблемы при обращении к любому элементу массива из другого класса
C++
1
2
3
4
5
6
void Screen::Check()
{
    ArrayPixel arrPixels(bmpSize.x, bmpSize.y);
    //например
    arrPixels.pixel[0][0][0] = 1;
}
да, ещё не нравится компилятору строка delete [] pixel[rgb][x]; в деструкторе, также ошибка доступа

собсн как реализовать собственный класс с массивом, хелп
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2016, 18:04     обращение к элементу массива (массив как поле класса)
Посмотрите здесь:

Двумерный массив. Обращение к каждому элементу. C++
Организовать обращение к элементу массива в классе C++
Обращение к элементу массива через адрес C++
Обращение к элементу массива C++
Обращение ко второму элементу массива указателей на строки C++
C++ Обращение к элементу динамического массива структур
Массив как поле класса C++
C++ Обращение к элементу массива из строк
C++ Что быстрее? Обращение к элементу массива или к элементу структуры?
C++ Массив, как поле данных класса
Обращение к элементу массива C++
C++ Константное поле класса как размер массива

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SergioO
93 / 182 / 63
Регистрация: 13.12.2015
Сообщений: 986
01.02.2016, 18:17     обращение к элементу массива (массив как поле класса) #2
C++
1
delete [] pixel;
Добавлено через 32 секунды
Цитата Сообщение от Sevename Посмотреть сообщение
byte*** pixel;
это что?!


вы думаете что
C++
1
 byte*** pixel;
и
C++
1
pixel[0][0][0]
одно и то же?


C++
1
byte*** pixel = new byte** [3];
скажите по-русски, что вы хотите?
Sevename
0 / 0 / 0
Регистрация: 25.07.2015
Сообщений: 4
01.02.2016, 18:33  [ТС]     обращение к элементу массива (массив как поле класса) #3
Цитата Сообщение от SergioO Посмотреть сообщение
это что?!
мм, объявление 3-ёх мерного массива (точнее указателя на указатель на указатель на тип byte)
в конструкторе выделяется память, в деструкторе уничтожается

Цитата Сообщение от SergioO Посмотреть сообщение
pixel[0][0][0] = 1;
одно и то же?
тут элементу [0][0][0] массива pixel присваивается значение, но компилятор выдаёт ошибку доступа

Добавлено через 6 минут
Цитата Сообщение от SergioO Посмотреть сообщение
скажите по-русски, что вы хотите?
3-мерный массив нужен, выделение памяти и уничтожение в одном классе
а управление его элементами(присваивание/считывание) из другого класса

Добавлено через 6 минут
p.s. вы что не работали с двумерными динамическими массивами new/delet (не вектор)?
тот же принцип, только трёхмерный и вынёс код выделения и очищения памяти в отдельный класс
SergioO
93 / 182 / 63
Регистрация: 13.12.2015
Сообщений: 986
01.02.2016, 18:47     обращение к элементу массива (массив как поле класса) #4
Sevename, поймите хоть скольки-мерный массив указатель на него нужен один.
Например:
int arr[9][10][11][129]={0};
arr - это указатель на начало массива - arr[0][0][0][0], те *arr[0][0][0][0]
byte*** pixel;
это не массив и обратиться как pixel[][][] нельзя.
Sevename
0 / 0 / 0
Регистрация: 25.07.2015
Сообщений: 4
01.02.2016, 18:57  [ТС]     обращение к элементу массива (массив как поле класса) #5
а всё, я понял ошибку
в конструкторе я заново создал массив - локальный, а не работал с массивом класса
C++
1
2
3
4
5
6
ArrayPixel::ArrayPixel(int width, int height)
{
    //...
    byte*** pixel = new byte** [3];
    //...
}
а надо было
C++
1
2
3
4
5
6
ArrayPixel::ArrayPixel(int width, int height)
{
    //...
    pixel = new byte** [3];
    //...
}
и всё заработало

спасибо, что натолкнули на мысль
Yandex
Объявления
01.02.2016, 18:57     обращение к элементу массива (массив как поле класса)
Ответ Создать тему
Опции темы

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