Как увеличить массив переменных класса?

Я создаю инфракрасную макроклавиатуру. Я хочу сохранить Unicode для класса Keyboard в массиве внутри созданного мной класса под названием Keybind и позволить пользователю программировать столько выходов, сколько они хотят. хочу, я хочу, чтобы хранилище было изменяемым. В настоящее время я использую класс String и декодирую в программе, но это требует больших ресурсов процессора и не очень практично.
Я хочу использовать массив или список, но не нашел способа увеличить размер массива внутри класса. Приведение временного массива не сработало:

  int intArray[] = {0,1,2,3,4,5};
  int* temp[7];

  for(int x = 0; x<sizeof(intArray)/sizeof(intArray[0]); x++){
    temp[x] = intArray[x];
  }
  temp[6] = 6;
  intArray = temp;

IDE выдает "несовместимые типы при назначении 'int* [7]' 'int [6]'"

, 👍1

Обсуждение

Ошибка в том, что ìnt* temp[7] дает вам массив из 7 указателей на целые числа, а не массив из 7 целых чисел. Удалите *. Хотя я не понимаю, какое это имеет отношение к увеличению массива. Это можно сделать с помощью динамического распределения памяти (точно так же, как это делает класс String в фоновом режиме), хотя это не очень хорошая идея для Arduinos, особенно для тех, у которых мало памяти, например, основанных на Atmega328p (Uno, Нано, ...), @chrisl

Пожалуйста, объясните понятнее, что вы пытаетесь сделать и как., @chrisl


1 ответ


Лучший ответ:

0

Я хочу [...] разрешить пользователю программировать столько выходов, сколько он хочет

Это может быть проблематично. Микроконтроллер имеет ограниченное количество Оперативная память: она не сможет хранить сколь угодно длинные макросы. Вам следует рассмотрите способ сообщить пользователю «извините, памяти больше нет». Или вы можете будьте оптимистичны и предполагайте, что пользователь никогда не будет пытаться долго записывать макросы достаточно исчерпать память... и пусть прошивка крашится если это предположение оказывается неверным.

В настоящее время я использую класс String и декодирую в программе, но это сильно загружает процессор и не очень практично.

Высокая нагрузка на ЦП? Вы имеете в виду распределение? Чтение содержимого строки объект не загружает ЦП. И что вы находите непрактичным в Строковый класс? По своей сути это просто контейнер с динамическим размером для данные символов, которые, кажется, именно то, что вы ищете.

Я не нашел способа увеличить размер массива внутри класса.

Класс – это структура данных фиксированного размера. Вы никак не можете расширить его содержимое. Если вам нужно что-то переменного размера, вы должны использовать динамическое размещение. Затем вы сохраните только указатель на выделенная память в вашем классе. Это именно то, что делает String. Единственным другим вариантом является хранение массива фиксированного размера в class и сделайте этот размер достаточно большим, чтобы вам больше никогда не потребовалось.

,