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

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

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

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

01.02.2016, 18:04. Просмотров 358. Ответов 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++
Объясните пожалуйста, что происходит в строке помеченной *** void main(){ char str; char ptr; cin &gt;&gt; str; cout &lt;&lt; ...

Обращение к элементу массива - C++
Как мне обратиться к последнему элементу массива? например: Array // i = 0 тут нужно что бы -1 был последним т.е N-1 //можно ли с...

Обращение к элементу массива из строк - C++
Здравствуйте! Имеется такой код: string mesiaci = //Massiv iz strok { &quot;Ianvar'&quot;, &quot;Fevral'&quot;, &quot;Mart&quot;, &quot;Aprel'&quot;, ...

Двумерный массив. Обращение к каждому элементу. - C++
Пожалуйста помогите написать данную программу: Дана матрица символов. Написать программу обращения к каждому элементу этой матрицы, ...

Обращение к элементу массива через адрес - C++
#include &quot;a.h&quot; #include &lt;iostream&gt; #include&lt;stdio.h&gt; using namespace std; void vvod(float mas,int n); void calc(float...

Обращение к элементу динамического массива структур - C++
Само задание: http://cs412722.vk.me/v412722398/4e77/fUkq93u2HDE.jpg пока написал только это: #include &lt;iostream&gt; using namespace std;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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[][][] нельзя.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2016, 18:57     Обращение к элементу массива (массив как поле класса)
Еще ссылки по теме:

Организовать обращение к элементу массива в классе - C++
Есть класс: class Graf { public: double **M; double MT; Graf(){}; ~Graf(){}; Graf(int n){

Обращение ко второму элементу массива указателей на строки - C++
Добрый день. Не получается обратиться ко второму элементу: #include &lt;stdio.h&gt; int main(void) { char **ss = { &quot;Run away&quot;, ...

Массив как поле класса - C++
Например, имеется класс с полем массивом размерностью 10 на 10. class massiv { private: int mas; public: ... }; ...

Массив, как поле данных класса - C++
Как правильно обьявить массив char как элемент данных класса и проинициализировать его нулями в конструкторе??


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

Или воспользуйтесь поиском по форуму:
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