Проблема инициализации массива struct
Цель для этого состоит в том, чтобы создать структуру, которая включает в себя имя, идентификатор, имя файла и логическое значение, а затем создать массив этих структур. Вот что я придумал:
struct Amiibo
{
char *aName{};
char *ID{};
char *AudioFileName{};
bool alreadyPlayed{false};
};
Amiibo amii[20] = {
{"Mario","A5005B00","MARIO",false}, //0
{"Meta Knight","A5 00 02 00","MK"}, //1
{"Inkling", "A5 00 05 00","INK"}, //2
{"Donkey Kong","A5 00 01 00","DK"}, //3
{"Lucas","A5 00 0A 00","LUCAS"}, //4
{"Duck Hunt", "A5 00 08 00","DUCKH"}, //5
{"Ocarina of Time Link","A5 00 01 00","OOTL"}, //6
{"Breath of The Wild Link","random","BOTWL"}, //7
{"8-bit Link","random","8BITL"}, //8
{"Toon Link","random","TOONL"}, //9
{"Mr. Game and Watch","random","GANDW"}, //10
{"Falco","random","FALCO"}, //11
{"King Dedede","random","DEDEDE"}, //12
{"Mewtwo","random","MEWTWO"}, //13
{"Captain Falcon","random","CAPF"}, //14
{"ROB","random","ROB"}, //15
{"PAC-MAN","random","PACMAN"}, //16
{"Cloud","random","CLOUD"}, //17
{"Ness","random","NESS"}, //18
{"Ryu","random","RYU"} //19
};
Это дает мне следующую ошибку:
ошибка: не удалось преобразовать " {"Mario", "A5005B00", "MARIO", false}" из " в "Amiibo"
И та же ошибка для всех остальных элементов массива. Я попытался изменить amii[20] на указатель с помощью *amii[20]. Это привело меня к этой ошибке:
скобки вокруг скалярного интилизатора типа "Amiibo"
Я не знаю, что с этим делать, так как совершенно уверен, что это не скалярный тип.
Мне бы очень хотелось создать структурный массив, чтобы я мог циклически перебирать их наугад, используя случайное семя. Это не должно быть так сложно, но я упираюсь в стену. Я был бы признателен за любой совет, который вы все должны дать. Спасибо.
@Ethan Braun, 👍1
Обсуждение1 ответ
Если вы используете значения по умолчанию в объявлении структуры, вы должны определить также конструкторы для установки определенных элементов:
struct Amiibo
{
const char *aName{};
const char *ID{};
const char *AudioFileName{};
bool alreadyPlayed{false};
Amiibo() = default; // реализация по умолчанию для конструктора default
Amiibo(const char* name, const char* id, const char * audio) // конструктор с тремя строками c в качестве параметров
: aName{ name }
, ID{ id }
, AudioFileName{ audio }
{ ; }
};
Amiibo amii[] = {
{"Mario","A5005B00","MARIO",false}, //0
{"Meta Knight","A5 00 02 00","MK"}, //1
{"Inkling", "A5 00 05 00","INK"}, //2
{"Donkey Kong","A5 00 01 00","DK"}, //3
{"Lucas","A5 00 0A 00","LUCAS"}, //4
{"Duck Hunt", "A5 00 08 00","DUCKH"}, //5
{"Ocarina of Time Link","A5 00 01 00","OOTL"}, //6
{"Breath of The Wild Link","random","BOTWL"}, //7
{"8-bit Link","random","8BITL"}, //8
{"Toon Link","random","TOONL"}, //9
{"Mr. Game and Watch","random","GANDW"}, //10
{"Falco","random","FALCO"}, //11
{"King Dedede","random","DEDEDE"}, //12
{"Mewtwo","random","MEWTWO"}, //13
{"Captain Falcon","random","CAPF"}, //14
{"ROB","random","ROB"}, //15
{"PAC-MAN","random","PACMAN"}, //16
{"Cloud","random","CLOUD"}, //17
{"Ness","random","NESS"}, //18
{"Ryu","random","RYU"} //19
};
Кстати на старых AVR все эти строки также будут храниться в памяти
Премного благодарен. Я могу в конечном итоге просто использовать переключатель или что-то еще, чтобы избежать проблем с памятью., @Ethan Braun
- Инициализация массива структур
- Как получить размер (sizeof) массива структур
- Как записать последовательность кнопок и сохранить ее в массиве
- Как вернуть значение массива символов в функции Arduino IDE?
- Почему я не могу изменить значения массива, даже если оператор успешно вызван? TFT-сенсорный экран
- Использование массивов, двоичных данных и битового чтения
- Одна и та же структура занимает разное пространство в памяти Uno и NodeMCU ESP8266, что приводит к повреждению данных при передаче через nRF24L01+
- Почему структура переменного размера не компилируется в Arduino IDE?
Если вы используете значения по умолчанию, вы не можете использовать этот тип инициализации, вам нужно иметь правильные конструкторы, чтобы заставить его работать. Однако это будет сложно с этими C-строками, @KIIV
Не могли бы вы привести пример правильного конструктора?, @Ethan Braun
структура Amiibo {"... "Amiibo(постоянное имя*, постоянное имя* идентификатор, постоянное имя * аудио) : имя{ имя}, идентификатор{ идентификатор}, имя аудиофайла{ аудио } { ; }
и еще один с 4 параметрами... (кстати, вам также нужно изменить внутренние типы на " const char*", иначе он будет кричать об отбрасывании квалификатора), @KIIVПросто опустить значения по умолчанию?!, @DataFiddler