У вас есть 3 варианта здесь.
- Превратите класс в шаблон, и параметр depth станет аргументом шаблона. Затем он является постоянным, и вы можете создать массив с соответствующим размером.
- Используйте вектор std :: для вашего внутреннего массива и используйте метод
resize()
.
- Сделайте max_depth a
static const uint32_t max_depth = 42;
(Инициализируйте в классе), а затем вы можете использовать этот max_depth, также как размер для массива a
.
Решение 1 выглядит то вроде этого:
template <size_t max_depth>
class AStack
{
// ...
int a[max_depth];
};
Решение 2 будет выглядеть следующим образом:
#include <vector>
class AStack
{
public:
AStack(size_t max_depth)
{
a.resize(max_depth);
// ...
}
// ...
std::vector<int> a;
// ...
};
Решение 3 будет выглядеть так:
class AStack
{
static const int max_depth = 42;
int a[max_depth];
// ...
};
Фиксированный размер c-массивы могут быть объявлены только с помощью выражения с постоянным размером массива.
Конструктор воздействует на нестатические элементы класса. Статические константные члены класса инициализируются «жестко запрограммированными».
Поэтому, если вы хотите разрешить пользователям этого класса использовать его с различными размерами стека, вам потребуется вариант 1 или вариант 2. Если вы хотите жестко закодировать размер стека в классе, используйте опцию 3. Вариант 2 также можно выполнить «вручную» с использованием оператора new() или new() вместо std :: vector. Но тогда у вас есть гораздо больше, чтобы набирать, проверять, и у вас, скорее всего, будут ошибки, которые не будут впечатлять вашего инструктора;)
Исправьте основные опечатки (например, 'AStack' против' Astack') и не заставляйте нас угадывать, какие ошибки вы получаете. –
О, боже мой ... действительно испортил это, не так ли?Кроме того, если max_Size является статическим элементом данных, то нет смысла инициализировать его с помощью конструктора. Итак, теперь он стал нестационарным. –
Он должен быть статичным и инициализироваться в классе, который можно использовать в качестве постоянного выражения для размера массива. Если вы хотите указать размер во время выполнения, вы не можете использовать простой массив; используйте динамический массив типа 'std :: vector'. –