Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
1

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

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

Author24 — интернет-сервис помощи студентам
Допустим, я хочу создать объект, одним из атрибутов которого будет простой одномерный нединамический массив, состоящий, скажем, из 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 ];
__________________^
Вопрос с целью прояснить тонкости.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2013, 22:59
Ответы с готовыми решениями:

Передача названия класса в метод другого класса в качестве входных данных
У меня есть класс "class1", от которого наследуется несколько однотипных классов classX, classY,...

Объект в качестве элемента класса
Не могу понять почему возникает ошибка. Stack.h #ifndef STACK_H #define STACK_H ...

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

Изменение статического закрытого элемента данных класса посредством статической элемент-функции класса
Добрый день. Не могу разобраться, как изменить закрытую статическую переменную класса. Вот код....

11
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,260
Записей в блоге: 7
22.11.2013, 23:14 2
Значение константе присваевывается на месте объявления константы
C++
1
const int arraySize=25;
а таким образом
C++
1
Example::Example(...) : arraySize( 25 )
можно инициализировать только неконстантные члены класса
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
22.11.2013, 23:24 3
StackOverflow, если arraySize для всех экземпляров одинаковый, то можно сделать её static const. Если нет , то как параметр шаблона - иначе никак. В любом случае у всех экземпляров одного класса размер статичесского массива будет одинаковым.
1
All rights reserved.
93 / 83 / 24
Регистрация: 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', а также указывает на проблемное место, а это как раз присваивание.
0
873 / 771 / 173
Регистрация: 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 ];
};
1
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
22.11.2013, 23:54 6
StackOverflow, эмм... если честно, я не знаю; так использовать статические интегральные константы вполне нормально вроде.
0
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
23.11.2013, 00:07  [ТС] 7
MrCold, спасибо, с enum'ом вы здорово придумали!)
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
23.11.2013, 00:09 8
Цитата Сообщение от StackOverflow Посмотреть сообщение
MrCold, спасибо, с enum'ом вы здорово придумали!)
Это не я это Страуструп
0
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
23.11.2013, 00:15  [ТС] 9
MrCold, к сожалению, ещё руки не дошли до его фундоментального труда.) Чем больше возникает у меня вопросов, с которыми я обращаюсь сюда за помощью, тем больше я понимаю, что его книга "must read".
0
gray_fox
23.11.2013, 00:54
  #10

Не по теме:

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

0
All rights reserved.
93 / 83 / 24
Регистрация: 03.08.2013
Сообщений: 258
23.11.2013, 01:13  [ТС] 11
offtop:
Programming: Principles and Practice Using C++)

Хотя, чего греха таить, ни до одного пока не дошли))
0
gray_fox
23.11.2013, 02:38     Массив в качестве элемента данных класса
  #12

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2013, 02:38

Написать шаблонную функцию поиска элемента в матрице (в качестве аргументов функция должна принимать двумерный массив, е
Помогите пожалуйста. Правильный код ? =========================== Написать шаблонную функцию...

Объявление объекта класса fstream в качестве статической компоненты другого класса
Доброго времени суток. Есть задание, в котором говорится "...Перепишите программы из упражнений 4 и...

Использование в качестве поля класса указатель на объект другого класса
Ошибка в названии - "указателЯ" Вот, пытаюсь освоить ООП (пока только учусь): создаю класс...

Использование метода класса как функции в качестве типизированного аргумента в методе класса
Использование метода класса как функции в качестве типизированного аргумента в методе класса ...

Указатель на метод класса в качестве аргумента метода класса
Функция _createFun вызывается для создания ХХХ в основном классе. Но вот потребовалось создать ХХХ...

Как передать функции в качестве параметра массив пользовательских типов данных
Собственно вопрос указан в теме. Весь день мучаюсь с этим. есть пользовательский тип данных: Type...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru