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

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

Войти
Регистрация
Восстановить пароль
 
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
#1

Массив в качестве элемента данных класса - C++

22.11.2013, 22:59. Просмотров 367. Ответов 11
Метки нет (Все метки)

Допустим, я хочу создать объект, одним из атрибутов которого будет простой одномерный нединамический массив, состоящий, скажем, из 25 элементов.

Я хочу хранить число его элементов в constant variable. Делаю так:
C++
1
2
3
4
5
6
7
8
9
10
11
class Example
{
public:
    Example(...);
    ....
    int getArraySize() const;
private:
    ....
    const int arraySize;
    char array[ arraySize ];
};
C++
1
2
Example::Example(...) : arraySize( 25 )
{...}
В итоге компилятор сообщает, что "граница массива не является константным целым перед токеном ']':
char array[ arraySize ];
__________________^
Вопрос с целью прояснить тонкости.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 22:59     Массив в качестве элемента данных класса
Посмотрите здесь:

Объект в качестве элемента класса - C++
Не могу понять почему возникает ошибка. Stack.h #ifndef STACK_H #define STACK_H template<typename STACKTYPE> class...

двумерный массив в качестве параметра метода класса - C++
Добрый день Есть проблемка, попробую упростить условия по максимуму: В программе меется некоторый класс, у этого класса есть метод,...

Массив объектов класса, отладка, доступ к полям элемента массива - C++
Доброго времени! Создал класс с полем char и int. Person.h #ifndef PERSON_H #define PERSON_H //#include <iostream> using...

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

Функции в качестве члена класса - C++
Вот изучаю классы, и я так понял,можно описывать функции вне класса, достаточно знака ": :". Вот решил написать, поэкспериментировать....

Передача класса в качестве параметра шаблона - C++
Имеется два класса, один это однонаправленный итератор, другой это двунаправленный. Двунаправленный получается из однонаправленного. Вот...

Массив данных: вычислить произвидение максимального и минимального элемента - C++
Для чисел Х (0.01; -27.3; 0; 125.27; -371.45; 0; 12; -5; -172.3; 0.05; - 17.1; 49.5; -0.01) необходимо обчислить произвидение...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
шКодер самоучка
1813 / 1614 / 588
Регистрация: 09.10.2013
Сообщений: 3,618
Записей в блоге: 6
Завершенные тесты: 2
22.11.2013, 23:14     Массив в качестве элемента данных класса #2
Значение константе присваевывается на месте объявления константы
C++
1
const int arraySize=25;
а таким образом
C++
1
Example::Example(...) : arraySize( 25 )
можно инициализировать только неконстантные члены класса
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
22.11.2013, 23:24     Массив в качестве элемента данных класса #3
StackOverflow, если arraySize для всех экземпляров одинаковый, то можно сделать её static const. Если нет , то как параметр шаблона - иначе никак. В любом случае у всех экземпляров одного класса размер статичесского массива будет одинаковым.
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
22.11.2013, 23:47  [ТС]     Массив в качестве элемента данных класса #4
gray_fox, привет!
Сделал так:
C++
1
2
3
4
5
6
7
8
class Example
{
public:
....
private:
    static const int arraySize = 25;
    char array[ arraySize ];
};
Всё скомпилировалось, но при запуске получаем:
"Ошибка сегментирования (сделан дамп памяти)"

А если вынести инициализацию за пределы интерфейса (в определение), то уже не работает)) Ругается, что. опять же, arraySize не является константной целой. Зато если никак не связывать static const int arraySize и размер массива, но оставить её, при этом инициализацию также провести в определении, то всё компилируется, компануется и запускается.)

Добавлено через 6 минут
Cra3y, со статиком срабатывает, а при объявлении и одновременной инициализации константной целой уже не работает. Компилятор сообщает, происходит неправильное использование элемента данных класса
'const int arraySize', а также указывает на проблемное место, а это как раз присваивание.
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
22.11.2013, 23:52     Массив в качестве элемента данных класса #5
C++
1
2
3
4
5
6
7
8
9
10
class Example
{
public:
....
private:
    static const int arraySize;
    char array[ arraySize ];
};
 
const int Example::arraySize = 25;
C++
1
2
3
4
5
6
7
8
class Example
{
public:
....
private:
    enum { arraySize = 25};
    char array[ arraySize ];
};
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
22.11.2013, 23:54     Массив в качестве элемента данных класса #6
StackOverflow, эмм... если честно, я не знаю; так использовать статические интегральные константы вполне нормально вроде.
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
23.11.2013, 00:07  [ТС]     Массив в качестве элемента данных класса #7
MrCold, спасибо, с enum'ом вы здорово придумали!)
MrCold
854 / 752 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
23.11.2013, 00:09     Массив в качестве элемента данных класса #8
Цитата Сообщение от StackOverflow Посмотреть сообщение
MrCold, спасибо, с enum'ом вы здорово придумали!)
Это не я это Страуструп
StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
23.11.2013, 00:15  [ТС]     Массив в качестве элемента данных класса #9
MrCold, к сожалению, ещё руки не дошли до его фундоментального труда.) Чем больше возникает у меня вопросов, с которыми я обращаюсь сюда за помощью, тем больше я понимаю, что его книга "must read".
gray_fox
23.11.2013, 00:54
  #10

Не по теме:

Цитата Сообщение от StackOverflow Посмотреть сообщение
MrCold, к сожалению, ещё руки не дошли до его фундоментального труда.)
До какого из них?) Design and Evolution of C++?

StackOverflow
All rights reserved.
91 / 81 / 5
Регистрация: 03.08.2013
Сообщений: 258
23.11.2013, 01:13  [ТС]     Массив в качестве элемента данных класса #11
offtop:
Programming: Principles and Practice Using C++)

Хотя, чего греха таить, ни до одного пока не дошли))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2013, 02:38     Массив в качестве элемента данных класса
Еще ссылки по теме:

Передача enum в качестве аргумента метода класса - C++
Есть класс //class order; class ticket{ enum type_of_place { coupe, general, berth, wagon_lit }_type_of_place; char*...

Передача члена класса в качестве параметра метода - C++
Добрый день. Интересует следующий вопрос: как передать член класса как параметр по значению в метод того же класса? То есть необходимо,...

Шаблон класса в качестве параметра другому шаблону - C++
Почему у меня не получается сделать так: template <typename T> class A { // .... }; vector<A> Vec;

Использование динамического массива в качестве переменной класса - C++
Доброго времени. Подскажите пожалуйста возможно ли в классе объявить переменную типа int *a, затем в конструкторе инициализировать ее как...

Передача метода класса в качестве аргумента внешней функции - C++
Столкнулся со следующей проблемой. Пусть у меня есть некая внешняя функция, которая принимает в качестве аргумента указатель на функцию...


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

Или воспользуйтесь поиском по форуму:
gray_fox
23.11.2013, 02:38     Массив в качестве элемента данных класса
  #12

Не по теме:

StackOverflow, таки советую, если интересен С++, как-нибудь хотя бы полистать Design & Evolution, это не учебник, но для меня оказалась самой интересной книгой этого автора. Хотя вообще из Строуструпа писатель некудышный, как по мне)

Yandex
Объявления
23.11.2013, 02:38     Массив в качестве элемента данных класса
Ответ Создать тему
Опции темы

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