Я компилирую файл C++ (на Raspberry Pi5 под управлением Debian 12 с Gnu C++), и этот файл автоматически генерируется из файла данных XML. В файле есть только несколько константных массивов структур. В одном из массивов есть внутренний массив структур, и компилятор жалуется, что слишком много инициализаторов. Для меня это не имеет смысла, но, возможно, у меня инициализаторы каким-то образом неправильно отформатированы.
Соответствующие фрагменты кода:
в заголовочном файле:
enum SignalNames
{
WestEN,
WestF1,
WestFM,
WestYardEnter,
WestYardEnter2_4,
EastYeardEntry1_3,
EastYardEnter2_4,
EastExit4__Dwarf_,
NUM_SIGNALS
};
struct SignalConfig {
static constexpr uint ASPECTCOUNT = 5;
enum Aspect
{
Stop,
Slow_Aproach,
Slow_Clear,
Aproach,
Clear,
Hold,
Go,
UNUSED
};
struct {
Aspect aspect;
openlcb::EventId eventid;
} aspects[ASPECTCOUNT];
};
extern const SignalConfig SignalsCfg[NUM_SIGNALS];
в файле C++:
const SignalConfig SignalsCfg[NUM_SIGNALS] = {
{
{SignalConfig::Stop, 0000000000000000LL},
{SignalConfig::Slow_Aproach, 0000000000000000LL},
{SignalConfig::Slow_Clear, 0000000000000000LL},
{SignalConfig::Aproach, 0000000000000000LL},
{SignalConfig::Clear, 0000000000000000LL},
},// WestEN
{
{SignalConfig::Stop, 0000000000000000LL},
{SignalConfig::Aproach, 0000000000000000LL},
{SignalConfig::Slow_Clear, 0000000000000000LL},
{SignalConfig::UNUSED, 0LL},
{SignalConfig::UNUSED, 0LL},
},// WestF1
{
{SignalConfig::Stop, 0000000000000000LL},
{SignalConfig::Aproach, 0000000000000000LL},
{SignalConfig::Clear, 0000000000000000LL},
{SignalConfig::UNUSED, 0LL},
{SignalConfig::UNUSED, 0LL},
},// WestFM
{
{SignalConfig::Stop, 0000000000000000LL},
{SignalConfig::Slow_Aproach, 0000000000000000LL},
{SignalConfig::Slow_Clear, 0000000000000000LL},
{SignalConfig::Aproach, 0000000000000000LL},
{SignalConfig::Clear, 0000000000000000LL},
},// WestYardEnter
{
{SignalConfig::Stop, 0000000000000000LL},
{SignalConfig::Slow_Aproach, 0000000000000000LL},
{SignalConfig::Slow_Clear, 0000000000000000LL},
{SignalConfig::Aproach, 0000000000000000LL},
{SignalConfig::Clear, 0000000000000000LL},
},// WestYardEnter2-4
{
{SignalConfig::Stop, 0000000000000000LL},
{SignalConfig::Slow_Aproach, 0000000000000000LL},
{SignalConfig::Slow_Clear, 0000000000000000LL},
{SignalConfig::Aproach, 0000000000000000LL},
{SignalConfig::Clear, 0000000000000000LL},
},// EastYeardEntry1-3
{
{SignalConfig::Stop, 0000000000000000LL},
{SignalConfig::Slow_Aproach, 0000000000000000LL},
{SignalConfig::Slow_Clear, 0000000000000000LL},
{SignalConfig::Aproach, 0000000000000000LL},
{SignalConfig::Clear, 0000000000000000LL},
},// EastYardEnter2-4
{
{SignalConfig::Hold, 0000000000000000LL},
{SignalConfig::Go, 0000000000000000LL},
{SignalConfig::UNUSED, 0LL},
{SignalConfig::UNUSED, 0LL},
{SignalConfig::UNUSED, 0LL},
},// EastExit4 (Dwarf)
}; // This is line 145
Сообщение об ошибке:
/home/heller/WendellDepotMusuem/Software/targets/linux.aarch64/WendellDepot.cxx:145:1: error: too many initializers for ‘const WendellDepot::SignalConfig’
145 | };
| ^
make[2]: *** [/home/heller/openmrn/etc/prog.mk:288: WendellDepot.o] Error 1
Подробнее здесь: https://stackoverflow.com/questions/793 ... itializers