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

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

Войти
Регистрация
Восстановить пароль
 
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
#1

Не работает динамический массив в классе: что раньше, указатель или размер? - C++

05.12.2015, 07:10. Просмотров 282. Ответов 8
Метки нет (Все метки)

Подскажите пожалуйста где ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class arar
{
    int*arr, size;
public:
    arar() :arr(new int[size]()), size(10)
    {
        for (int i(0); i < size; i++)
            arr[i] = rand() % 10;
        cout << "created\n";
    }
    void show();
    
    ~arar()
    {
        delete[]arr;
    }
    
};
Добавлено через 8 минут
А вот так все работает. Как правильно сделать списком?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class arar
{
    int*arr, size;
public:
    arar() 
    {
        size = 10;
        arr = new int[size]();          
        for (int i(0); i < size; i++)
            arr[i] = 1;
        cout << "created\n";
    }
    void show();
    
    ~arar()
    {
        delete[]arr;
    }
    
};
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2015, 07:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает динамический массив в классе: что раньше, указатель или размер? (C++):

Что быстрее использовать, массив э-в, или указатель на массив э-в? - C++
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...

Динамический массив и указатель на указатель - C++
Спасибо за внимание) Задача такова: нужно удалить элемент по индексу, при этом уменьшить сам массив на 1 (т.е. удалили элемент - уменьшился...

Компилятор ругается, что для индекса требуется массив или указатель - C++
У меня программа делает, по крайней мере, должна делать следующее: заполнять, линейный массив,размер которого задаются с...

Можно ли в классе создавать массив переменной длинны. Например динамический массив? - C++
Динамические массивы привлекают больше. :)

Динамический массив в классе - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;cmath&gt; using namespace std; class Matrix { int **matrix; int i,...

Динамический массив в классе - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; using namespace std; class person{ string name; int year; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
05.12.2015, 08:29 #2
Потому что size не определён.
C++
1
arar(): arr(new int[10]), size(10)
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
05.12.2015, 11:58  [ТС] #3
nmcf,
В таком случае уже определен?
C++
1
2
3
4
5
6
arar() :size(10), arr(new int[size]())
    {
        for (int i(0); i < size; i++)
            arr[i] = 1;
        cout << "created\n";
    }
Но все равно крашит
-L
15 / 9 / 10
Регистрация: 03.12.2015
Сообщений: 79
05.12.2015, 12:22 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
anti-k, порядок инициализации не зависит от расположения их в списке. Только от определения в классе.

Так что поменяйте
C++
1
int*arr, size;
на
C++
1
 int size,*arr;
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
05.12.2015, 12:24  [ТС] #5
Точно!!
nmcf
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
05.12.2015, 12:52 #6
Цитата Сообщение от -L Посмотреть сообщение
Только от определения в классе
Легко запутаться.

В приведённом примере надо явно указать 10, нет смысла использовать этот size.
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
05.12.2015, 14:27  [ТС] #7
nmcf, Мое почтение!!
Цитата Сообщение от nmcf Посмотреть сообщение
В приведённом примере надо явно указать 10, нет смысла использовать этот size.
Мне наивно казалось что как раз стоит сохранить указатель на массив и размер в одном объекте, а как лучше?
nmcf
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
05.12.2015, 14:31 #8
Я говорю, что если ты явно указываешь 10 для size, то точно также можно указать размер массива - константой. Для чего обязательно ссылаться на size?

Добавлено через 1 минуту
В конструкторе, а не вообще в классе.
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
05.12.2015, 14:33  [ТС] #9
nmcf, Понятно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2015, 14:33
Привет! Вот еще темы с ответами:

Динамический массив в классе - C++
Существует пример создания динамического двумерного массива: float **Matrix = new float*; for(i = 0; i &lt;SizeOfMatrix;i++) { ...

Динамический массив в классе - C++
Здравствуйте! Я пишу программу, в ней мне необходимо сделать иерархию, и в произвольных классах сделать контейнер - динамический массив....

Написать функцию принимающую массив и возвращающую указатель на динамический массив - C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий первые n нaибольших чисел. Как сделать...

Динамический массив и указатель - C++
Всем привет. Пытаюсь понять тему динамических массивов. Прошу помочь разобраться в следующем: Есть код (пример): int num = 5;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.12.2015, 14:33
Ответ Создать тему
Опции темы

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