Как увеличить массив переменных класса?
Я создаю инфракрасную макроклавиатуру. Я хочу сохранить 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]'
"
@TheNerdLog, 👍1
Обсуждение1 ответ
Лучший ответ:
Я хочу [...] разрешить пользователю программировать столько выходов, сколько он хочет
Это может быть проблематично. Микроконтроллер имеет ограниченное количество Оперативная память: она не сможет хранить сколь угодно длинные макросы. Вам следует рассмотрите способ сообщить пользователю «извините, памяти больше нет». Или вы можете будьте оптимистичны и предполагайте, что пользователь никогда не будет пытаться долго записывать макросы достаточно исчерпать память... и пусть прошивка крашится если это предположение оказывается неверным.
В настоящее время я использую класс String и декодирую в программе, но это сильно загружает процессор и не очень практично.
Высокая нагрузка на ЦП? Вы имеете в виду распределение? Чтение содержимого строки объект не загружает ЦП. И что вы находите непрактичным в Строковый класс? По своей сути это просто контейнер с динамическим размером для данные символов, которые, кажется, именно то, что вы ищете.
Я не нашел способа увеличить размер массива внутри класса.
Класс – это структура данных фиксированного размера. Вы никак не можете
расширить его содержимое. Если вам нужно что-то переменного размера, вы
должны использовать динамическое размещение. Затем вы сохраните только указатель на
выделенная память в вашем классе. Это именно то, что делает String
.
Единственным другим вариантом является хранение массива фиксированного размера в
class и сделайте этот размер достаточно большим, чтобы вам больше никогда не потребовалось.
- strcmp, похоже, не работает
- Хранение значений широты и долготы в виде символов с заданной точностью
- Массив float в строку, разделенную запятыми
- Чтение из SPIFFS - Как лучше всего работать со строковым (или char) массивом с неопределенной длиной?
- Как преобразовать строку в шестнадцатеричный массив
- Как отсортировать строку с числом по возрастанию
- Прокрутка текста I2C
- Ничего не получено от функции, возвращающей массив строк
Ошибка в том, что
ìnt* temp[7]
дает вам массив из 7 указателей на целые числа, а не массив из 7 целых чисел. Удалите*
. Хотя я не понимаю, какое это имеет отношение к увеличению массива. Это можно сделать с помощью динамического распределения памяти (точно так же, как это делает класс String в фоновом режиме), хотя это не очень хорошая идея для Arduinos, особенно для тех, у которых мало памяти, например, основанных на Atmega328p (Uno, Нано, ...), @chrislПожалуйста, объясните понятнее, что вы пытаетесь сделать и как., @chrisl